来自这个表:
table_a
id | date | owner | space
1 | 85408503 | 4 | 5
2 | 52345234 | 5 | 5
3 | 52345243 | 2 | 5
table_b
id | name | age
2 | luis | 32
4 | german | 53
5 | marta | 43
table_c
id | c_id | stack | vs
1 | 3 | 1 | 2
2 | 3 | 4 | 2
3 | 1 | 1 | 2
4 | 3 | 4 | 3
我想选择 table_a.space 中具有特定编号的每个字段(例如 table_a.space = 5)以逗号分隔巧合:table_a.id = table_c.c_id 也是 table_c.version = 2
所以..我的尝试(我尝试了很多东西,使用 group by,使用等等,但都没有成功
所以什么工作没有错误
SELECT t1.id,t1.owner,t3.vs
FROM table_a t1 LEFT JOIN table_b t2 ON t1.owner = t2.id
LEFT JOIN table_c t3 ON t1.id = t3.c_id
WHERE t1.space = 5 GROUP BY t1.id ORDER BY t1.id
我知道这会放入一个字符串中(如果我把它放在“t1.owner”之后,它只会返回一行
GROUP_CONCAT(DISTINCT t3.stack SEPARATOR ',') as selected
我不知道把 t3.vs 的巧合放在哪里
AND t3.vs = 2
我希望它在 t1.space = 5 时返回
id | owner| space | vs | selected
2 | 5 | 5 | 2 |
3 | 2 | 5 | 2 | 1,4
当 t1.space = 3 时
这应该返回
id | owner| space | vs |selected
3 | 2 | 5 | 2
最佳答案
您在问题中间更改了命名约定。你想要的是使用 GROUP BY
SELECT t1.id,t1.owner, GROUP_CONCAT(DISTINCT t3.stack SEPARATOR ',') as selected
FROM table_a t1 LEFT JOIN table_b t2 ON t1.owner = t2.id
LEFT JOIN table_c t3 ON t1.id = t3.c_id
WHERE t1.space = 5 AND t3.vs=2
GROUP BY t1.id
ORDER BY t1.id
如果没有 GROUP BY,您会将所有内容分组到 1 行中。 group by 告诉 mysql 按特定列对其进行分组。
关于mysql - 将两张连接表和一张数据表返回成一个用GROUP CONCAT逗号分隔的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32725682/