Mysql 从某些值为空的两个表中检索数据
我需要检索那些在论坛上发表过讨论以及从未在特定课程上发表过讨论的学生数据 我写此请求:Mysql 从某些值为空的两个表中检索数据,mysql,sql,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 | spe
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
,但这不可行。如果我理解正确,您需要所有参与者。如果是,则该表应该是左联接中的第一个表:
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 ;
您也可以使用右键联接
。但是,我几乎从未使用过右连接
。我发现LEFT JOIN
更容易理解——至少对于从左向右阅读的人来说是这样。将所有行保留在第一个表中比将所有行保留在(尚未读取的)最后一个表中更容易理解。尝试右键联接
查询:
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
将左连接更改为右连接完美,效果非常好!!非常感谢你