意外地將外部聯接轉換為內部聯接

外連線返回一個或兩個表中的所有行,以及匹配的行。

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'