意外地將外部聯接轉換為內部聯接
外連線返回一個或兩個表中的所有行,以及匹配的行。
Table People
PersonID FirstName
1 Alice
2 Bob
3 Eve
Table Scores
PersonID Subject Score
1 Math 100
2 Math 54
2 Science 98
左邊加入桌子:
Select * from People a
left join Scores b
on a.PersonID = b.PersonID
返回:
PersonID FirstName PersonID Subject Score
1 Alice 1 Math 100
2 Bob 2 Math 54
2 Bob 2 Science 98
3 Eve NULL NULL NULL
如果你想歸還所有人,並且有任何適用的數學分數,一個常見的錯誤就是寫:
Select * from People a
left join Scores b
on a.PersonID = b.PersonID
where Subject = 'Math'
除了刪除 Bob 的科學分數之外,這將從你的結果中刪除 Eve,因為 Subject
對她來說是 NULL
。
在保留 People
表中的所有個體的同時刪除非 Math 記錄的正確語法是:
Select * from People a
left join Scores b
on a.PersonID = b.PersonID
and b.Subject = 'Math'