左外连接B如何返回比A中更多的行?

Dru*_*rux 6 sql database sql-server outer-join

这个简单的SQL外连接有什么问题?

select count(*) from A -- 25766
select count(*) from B -- 1242
select count(*) from A left outer join B on A.b = B.b -- 310176
Run Code Online (Sandbox Code Playgroud)

分别返回25766,1242和310176行.(这适用于Microsoft SQL Server 2012.)如何A left outer join B返回比存在更多的行A,特别是在这个维恩图的情况下?我想我犯的是一个愚蠢的错误但它是什么?

小智 14

当列b在表中不唯一时,可能会发生这种情况B.假设您有这些数据:

  A      B
+---+  +---+---+
| b |  | b | c |
+---+  +---+---+
| 1 |  | 2 | 1 |
| 2 |  | 2 | 2 |
+---+  +---+---+

当你离开 - 加入AB列上时b,你得到了

+-----+------+------+
| A.b | B.b  | B.c  |
+-----+------+------+
|   1 | NULL | NULL |
|   2 |    2 |    1 |
|   2 |    2 |    2 |
+-----+------+------+

这给在总三排,即使两个AB只有每两行.