我有三张桌子"名称","组","任务"
"名称"
| nid | name |
| 1 | John |
| 2 | Jim |
| 3 | Jerry |
"组"
| gid | nid |
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
| 2 | 3 |
"任务"
| tid | gid |
| 1 | 2 |
| 2 | 1 |
我想获得属于任务的名单列表,如下所示:
| tid | names |
| 1 | Jim,Jerry |
| 2 | John,Jim |
我成功尝试过:
SELECT t.tid,n.name
FROM tasks t
LEFT JOIN groups g ON g.gid=t.gid
LEFT JOIN names n ON n.nid=g.nid
到目前为止这是有效的,但名称是单输出,所以我尝试使用GROUP_CONCAT()
,但这不起作用。我只是用错误的名字得到了第一个任务!?!?
SELECT t.tid,GROUP_CONCAT(n.name)
FROM tasks t
LEFT JOIN groups g ON g.gid=t.gid
LEFT JOIN names n ON n.nid=g.nid
我之前从未使用过GROUP_CONCAT()
。在没有连接的单个SELECT
中使用它时,它运行良好。简短的解释我做错了什么,会很好。
答案 0 :(得分:2)
使用group_concat
时,您需要对结果进行分组。
在查询结尾处添加group by t.id
。