第一次查询 - select * from a full outer join b on a.x = b.y where b.y = 10
第二次查询 - select * from a full outer join b on a.x = b.y and b.y = 10
考虑这些表格扩展名:
Table a Table b
======= =======
x y
----- -----
1 2
5 5
10 10
第一个查询将返回:
10 10
并且,第二个查询将返回:
1 NULL
5 NULL
10 10
你能否详细告诉我原因?
答案 0 :(得分:2)
第二个查询在ON
部分中具有条件,因此即使在连接表中没有对,也包括所有记录。
第一个条件在WHERE
部分中有条件,因此过滤掉了NULL
。
答案 1 :(得分:0)
第一个有一个where子句,所以只显示真实的结果(b.y = 10) 连接将显示所有resuts asits外连接
答案 2 :(得分:0)
第一个查询给出了预期的结果。
但是第二个查询的结果是不同的,因为您在两个条件(a.x = b.y and b.y = 10)
上加入表。由于它是外连接,它将打印所有满足的值,NULL
等输出。我创建了sql fiddle,以便您更好地理解