我需要检索在论坛中发布讨论的学生数据,以及从未在特定课程中发布的学生数据 我写了这个请求:
SELECT p.idp, p.age, p.speciality, f.categforum
FROM forum f
LEFT JOIN participant p
ON f.idp=p.idp AND f.idc=4
但仅返回在论坛中发帖的学生名单。 我的结果应该是这样的:
+-----+-----+------------+------------+
| idp | age | speciality | categforum |
+-----+-----+------------+------------+
| 01 | 23 | computing | NULL |
| 02 | 25 | management | problem |
| 03 | 35 | management | NULL |
| 05 | 25 | computing | social |
+-----+-----+------------+------------+
....
我已添加categforum
为NULL
,但这不可行。
答案 0 :(得分:2)
如果我理解正确,您需要所有参与者。如果是这样,那个表应该是LEFT JOIN
中的第一个表:
SELECT p.idp, p.age, p.speciality, f.categforum
FROM participant p LEFT JOIN
forum f
ON f.idp = p.idp AND f.idc = 4 ;
你可以也使用RIGHT JOIN
。但是,我几乎从不使用RIGHT JOIN
。我发现LEFT JOIN
更容易理解 - 至少对于那些从左到右阅读的人来说。将所有行保留在 first 表中的想法比将所有行保留在(尚未读取的) last 表中更容易理解。
答案 1 :(得分:1)
尝试右连接。
查询:
SELECT p.idp, p.age, p.speciality, f.categforum
FROM forum f
RIGHT JOIN participant p ON f.idp=p.idp
AND f.idc=4