首先,我刚刚花了12个小时试图弄清楚它是如何工作的,我已经学习了很多术语和定义,但我不能正确理解它。我研究过:
一对多relationship
的
还有更多!
我想要实现的是在列表中显示所有项目,在项目名称旁边显示项目负责人和每个项目的所有参与者(如果存在)。
所以现在的数据库结构:
DB: PROJECTS
PROJECT_ID PROJECT_NAME PROJECT_LEADER
1 MY PROJECT 1
2 UPDATE THIS 1
3 STATUS FIX 2
DB: USERS
USER_ID USER_FIRSTNAME
1 ADAM
2 BRIAN
DB: PARTICIPANTS
PARTICIPANT_ID PROJECT_ID USER_ID
1 1 2
和SQL查询:
SELECT *
FROM PROJECTS P
JOIN users u ON p.project_leader = u.user_id
这是我在运行查询时得到的结果:
MY PROJECT - ADAM
UPDATE THIS - ADAM
STATUS FIX - BRIAN
我希望看到的是:
MY PROJECT - ADAM & BRIAN
UPDATE THIS - ADAM
STATUS FIX - BRIAN
任何帮助都是有价值的!首先,非常感谢你。
发布于 2018-09-04 06:58:37
此查询将执行您想要的操作。基本上,要获得项目负责人和参与者的姓名,您需要连接到users表中两次,第一次是项目负责人的姓名,然后是参与者的姓名。您还需要对参与者和第二个用户表使用LEFT JOIN
,以防项目中没有任何参与者。
SELECT P.PROJECT_NAME, U1.USER_FIRSTNAME AS PROJECT_LEADER, GROUP_CONCAT(U2.USER_FIRSTNAME) AS PARTICIPANTS
FROM PROJECTS P
JOIN USERS U1 ON U1.USER_ID = P.PROJECT_LEADER
LEFT JOIN PARTICIPANTS T ON T.PROJECT_ID = P.PROJECT_ID
LEFT JOIN USERS U2 ON U2.USER_ID = T.USER_ID
GROUP BY P.PROJECT_ID
我创建了一个SQLFiddle (here),我向其中添加了比您多一点的数据。这是输出:
PROJECT_NAME PROJECT_LEADER PARTICIPANTS
MY PROJECT ADAM JOHN,BRIAN
UPDATE THIS ADAM (null)
STATUS FIX BRIAN ADAM
https://stackoverflow.com/questions/52155707
复制相似问题