有3个表格:
每个用户都可以分配给多个项目,并且存储在user_to_project表中。我想要一个用户名和他分配给的所有项目,在一个字段中用逗号分隔。我试过这样的方法:
SELECT
users.id AS 'ID',
users.name AS 'Name',
(SELECT GROUP_CONCAT (projects.name SEPARATOR ', ')
FROM user_to_project
INNER JOIN projects ON (projects.id = user_to_project.project_id)
INNER JOIN users ON (users.id = user_to_project.user_id)) AS 'Projects'
FROM users它让我在每一行中都分配了项目,这不是我想要的。怎么解决这个问题?
发布于 2016-06-08 11:31:38
您可以使用子查询来完成这一任务,但是您需要一个关联子句:
SELECT u.id, u.name,
(SELECT GROUP_CONCAT(p.name SEPARATOR ', ')
FROM user_to_project tup INNER JOIN
projects p
ON p.id = utp.project_id
WHERE u.id = utp.user_id
) as Projects
FROM users u;备注:
INNER JOIN的版本不同,因为这将保留所有用户,甚至那些没有项目的用户。发布于 2016-06-08 11:28:58
我没有看到这个相关查询的任何原因,而且您缺少一个将其与外部查询关联起来的条件。您还需要一个组的子句。
这个查询应该为每个ID提供所有项目:
SELECT users.id, users.name ,
GROUP_CONCAT (projects.name SEPARATOR ', ')
FROM user_to_project
INNER JOIN projects ON (projects.id = user_to_project.project_id)
INNER JOIN users ON (users.id = user_to_project.user_id)
GROUP BY users.id,users.name注意:要使查询正常工作,只需从内部查询中删除users表,并保留条件即可。
https://stackoverflow.com/questions/37701122
复制相似问题