Ior*_*nev 21
尝试这样的事情
SELECT A.* FROM TableA A
LEFT OUTER JOIN TableB B ON (A.id = B.a_id)
LEFT OUTER JOIN TableC C ON (A.id = C.a_id)
WHERE B.a_id IS NOT NULL
OR c.a_id IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
Ana*_*nax 10
要理解为什么在TableC没有记录时没有得到任何结果,你需要在SQL中学习一些关于JOIN类型的知识.
基本上,当您发出查询时
TableA A JOIN TableB B ON A.id = B.a_id
Run Code Online (Sandbox Code Playgroud)
您告诉数据库查看两者TableA并TableB获取满足连接谓词的所有行对(A.id = B.a_id).因此,如果TableB为空,则数据库无法找到具有前述条件的行和对.
这种类型的JOIN称为INNER JOIN,它是最常用的连接操作类型.
在你的情况下,如果存在这样的行,你想要从中获取所有行TableA X TableB和所有相关的行TableC(基于连接预测"A.id = C.a_id".这是OUTER JOIN的情况.两种最常见的类型这种连接的是LEFT JOIN(包括左表中的所有行)和RIGHT JOIN(包括右表中的所有行).
在这种情况下,您的查询应该是:
SELECT A.*
FROM
(TableA A JOIN Table B B ON A.id = B.a_id)
LEFT JOIN TableC C ON A.id = C.a_ID
Run Code Online (Sandbox Code Playgroud)
如果您想了解有关SQL中连接类型的更多信息,我建议您查看相关的Wikipedia页面
编辑
按照同样的逻辑,如果你想拥有的所有行TableA,只有从表中的相关行TableB和TableC(如果有的话),你的查询将变成:
SELECT A.*
FROM
(TableA A LEFT JOIN Table B B ON A.id = B.a_id)
LEFT JOIN TableC C ON A.id = C.a_ID
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44987 次 |
| 最近记录: |