从两个表中检索数据,其中某些值为NULL

时间:2017-12-12 12:09:35

标签: mysql sql

我需要检索在论坛中发布讨论的学生数据,以及从未在特定课程中发布的学生数据 我写了这个请求:

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     |
+-----+-----+------------+------------+

.... 我已添加categforumNULL,但这不可行。

2 个答案:

答案 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