我一直想知道结果是否会在多连接表查询中发生变化.
如果您有父表A
A B
ID|FID FID
1|2 1
2|4 2
3|5 3
4|7 4
5|8 5
6|NULL 6
7|NULL 7
8|NULL 8
Run Code Online (Sandbox Code Playgroud)
你在WHERE子句中指定了哪个表列是否重要?例如,两者之间有什么区别:
Select *
From Table A
Left Join B on A.FID = B.FID
WHERE A.FID IN (2,5,8)
Select *
From Table A
Left Join B on A.FID = B.FID
WHERE B.ID IN (2,5,8)
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
编辑:迈克尔已经解决了我的问题,我已经测试了它
"实际上,虽然你的答案很好(可能是他正在寻找的那个),但由于他的两个查询基本上都是对B的主键(A.FID,B.ID)进行过滤,因此它们在逻辑上是相同的(假设A.FID是B)的真正外键约束.也就是说,两个查询都会过滤掉B.ID不是2,5或8的行. - 迈克尔L.
唯一不同的是表B是主表,并且您基于B.ID查询,如:
SELECT *
FROM B
LEFT JOIN A ON A.FID = B.FID
WHERE B.FID IN (2,5,8)
Run Code Online (Sandbox Code Playgroud)
虽然这与将A作为主表相同:
SELECT *
FROM B
LEFT JOIN A ON A.FID = B.FID
WHERE A.FID IN (2,5,8)
Run Code Online (Sandbox Code Playgroud)
是的,它确实.
当您使用a时OUTER JOIN,其中一个表的值可能是NULL.所以,第二个查询相当于:
Select *
From Table A Inner Join
B
on A.FID = B.ID
WHERE B.ID IN (2, 5, 8);
Run Code Online (Sandbox Code Playgroud)
因为这些NULL值被过滤掉了.
作为一般规则LEFT JOIN:
WHERE子句.ON子句中.| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |