我有两张桌子:
名称(id,名称)地址(id,name_id,地址)
我想编写一个返回我的查询:名称,地址列表(address1,address2,adress3,..)
就像是:
Select A.name, B.list_of_addresses
From Names A
Inner Join (Select name_id, /*list_of_addresses with comma between them*/
From Addresses
Group By name_id) B ON A.id=B.name_id
Run Code Online (Sandbox Code Playgroud) 考虑三个实体作为学生,课程,主题以下是协会 -
student has_many courses,
student has_many subjects.
Run Code Online (Sandbox Code Playgroud)
现在我想使用mysql group_concat,主题名称和课程名称,在课程上左连接,在主题上左联接和group_by student_id获取学生记录.
问题是,group_concat('subjects.name') as subject_names我给了我重复的主题条目,但group_concat('students.name') as student_names给出了唯一的名称.
为什么?
我有很多表并执行大查询(大约5-7 LEFT JOIN).看起来像这样
SELECT *, t.id
GROUP_CONCAT(field SEPARATOR '|') AS fields,
GROUP_CONCAT(other SEPARATOR '|') AS others
FROM table t
LEFT JOIN tablefields tf ON t.id = tf.user_id
LEFT JOIN tableothers to ON t.id = to.user_id
GROUP BY t.id
Run Code Online (Sandbox Code Playgroud)
这是问题所在.所有字段都很好,但是两个就像'value | value | value | value'(15-17次),即使连接表中只有一行.
我做错了什么?
PS
我不能使用DISTINCT,因为一个字段是section_id而其他字段是note.注意可能类似,但section_id是唯一的.
PPS
https://gist.github.com/3098105
查看查询结果的一部分.
mysql> SELECT * FROM tablename;
+----+---------+------------+-----------+
| id | user_id | section_id | note_data |
+----+---------+------------+-----------+
| 1 | 1331 | UserVideo | test |
| 2 …Run Code Online (Sandbox Code Playgroud) 我有这个简单的表叫做问题:
id | asker
1 | Bob
2 | Marley
3 | Bob
Run Code Online (Sandbox Code Playgroud)
我想得到一个逗号分隔的提问者值列表.我使用以下查询:
SELECT GROUP_CONCAT(asker) FROM questions
Run Code Online (Sandbox Code Playgroud)
这将导致:
Bob,Marley,Bob
Run Code Online (Sandbox Code Playgroud)
我希望它的结果如下:
'Bob','Marley','Bob'
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个表成员有member_id,member_name,club_name,region,zone,email为各个领域.
我正在使用group_concat像MySQL这样的函数
SELECT group_concat(distinct m.email
SEPARATOR ', ' ) from member m group by m.club_name
Run Code Online (Sandbox Code Playgroud)
这工作正常.但我希望能够group_concat在其他领域无需创建其他查询.
是否可以提供其他字段作为参数?
member_id member_name club_name region zone email
1 member1 A 1 1 email1@example.com
2 member2 A 1 1 email2@example.com
3 member3 B 1 1 email3@example.com
4 member4 C 1 2 email4@example.com
5 member5 D 2 1 email5@example.com
**group by club**
email1@example.com,email2@example.com
email3@example.com
email4@example.com
email5@example.com
**group by region**
email1@example.com, …Run Code Online (Sandbox Code Playgroud) 这是我一直在努力解决的问题.我需要从特定博客ID中提取所有帖子.另外,我需要提取属于每个帖子的所有标签.
问题是当帖子没有标签时,查询不会返回它.如何获取标签单元格的空结果而不是不对该行进行退回?
我有以下表格
帖子:
ID title
74 HELLO
75 HELLO2
76 HELLO3
Run Code Online (Sandbox Code Playgroud)
tags_relation:
ID|post_id|tag_id
57 74 3
56 74 61
58 75 62
59 75 63
Run Code Online (Sandbox Code Playgroud)
标签:
ID tag
3 Love
61 Sometag
62 Sometag1
63 Sometag2
64 Sometag3
65 Sometag4
Run Code Online (Sandbox Code Playgroud)
这是我的查询:
SELECT post . * ,
user.username,
user.picture,
GROUP_CONCAT(tag.tag SEPARATOR ',') AS tags
FROM `posts` AS post
INNER JOIN `users` AS USER ON USER.blog_id = post.blog_id
INNER JOIN `tags_relation` AS tags_relation
INNER JOIN `tags` AS tag ON tag.ID = …Run Code Online (Sandbox Code Playgroud) 我在使用SQLite构建的应用程序之类的小型闪存卡中有多对多关系的经典安排.每张卡都可以有多个标签,每个标签都可以有多张卡.这两个实体每个都有一个表,第三个表用于链接记录.
这是卡片表:
CREATE TABLE Cards (CardId INTEGER PRIMARY KEY AUTOINCREMENT,
Text TEXT NOT NULL,
Answer INTEGER NOT NULL,
Success INTEGER NOT NULL,
Fail INTEGER NOT NULL);
Run Code Online (Sandbox Code Playgroud)
这是标签的表格:
CREATE TABLE Tags (TagId INTEGER PRIMARY KEY AUTOINCREMENT,
Name TEXT UNIQUE NOT NULL);
Run Code Online (Sandbox Code Playgroud)
这是交叉引用表:
CREATE TABLE CardsRelatedToTags (CardId INTEGER,
TagId INTEGER,
PRIMARY KEY (CardId, TagId));
Run Code Online (Sandbox Code Playgroud)
我需要在一个用逗号分隔的列中获取一张带有相关标签的卡片表.我已经可以通过以下查询获知我需要知道其Id的单行所需的内容:
SELECT Cards.CardId, Cards.Text,
(SELECT group_concat(Tags.Name, ', ') FROM Tags
JOIN CardsRelatedToTags ON CardsRelatedToTags.TagId = Tags.TagId
WHERE CardsRelatedToTags.CardId = 1) AS TagsList
FROM Cards
WHERE Cards.CardId = 1 …Run Code Online (Sandbox Code Playgroud) 在MySQL group_concat()子句中,我正在尝试对case语句的结果值进行排序.以下查询配置正确things.name排序,但未在同一上下文中排序"非美国"或"未知"值.
SELECT
things.id
,group_concat(DISTINCT
CASE
WHEN things.name <> 'United States' THEN 'Non-US'
WHEN things.name IS NULL THEN 'Unknown'
ELSE things.name
END
ORDER BY name SEPARATOR ', ')
FROM things
GROUP BY things.id
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情,但它不起作用:
SELECT
things.id
,group_concat(DISTINCT
(CASE
WHEN things.name <> 'United States' THEN 'Non-US'
WHEN things.name IS NULL THEN 'Unknown'
ELSE things.name
END) AS new_name
ORDER BY new_name SEPARATOR ', ')
FROM things
GROUP BY things.id
Run Code Online (Sandbox Code Playgroud)
有没有办法按"new_name"排序而不使用子查询/嵌套查询?
我无法找到这是可能的,所以,有没有选择限制GROUP_CONCATMySQL函数?
例如:
GROUP_CONCAT(ColName ORDER BY ColName DESC LIMIT 5)
Run Code Online (Sandbox Code Playgroud)
我不想使用子查询,因为这会严重降低性能.我可以稍后在PHP中对数组进行切片,但我想知道还是MySQL已经可以选择在MySQL中实现这一点.
我有以下结果集:
req_id | p_id | ai_result | hash | sku
1 | 4 | Match | XAN | HOW
1 | 4 | Match | HXN | HOW
1 | 4 | Non Match | 123 | HOW
Run Code Online (Sandbox Code Playgroud)
我需要以下输出
sku | matched | non_matched
HOW | XAN, HXN | 123
Run Code Online (Sandbox Code Playgroud)
这是我所能得到的:
SELECT sku, GROUP_CONCAT(hash) AS hash
FROM `sku_match`
GROUP BY req_id, p_id
Run Code Online (Sandbox Code Playgroud)
如何根据ai_result列区分行并将它们分开放置。像GROUP_CONCAT(hash) AS matched, GROUP_CONCAT(hash) AS non_matched什么?
group-concat ×10
mysql ×8
sql ×6
group-by ×2
php ×2
join ×1
left-join ×1
limit ×1
many-to-many ×1
sql-order-by ×1
sql-server ×1
sqlite ×1
t-sql ×1