在下面的查询中,我想将外连接保留在table3上。不应该导致ID大于table1中表ID的所有行。
这对我来说应该返回table3中大于table1 ID的所有行。那是怎么回事呢。
问题:这是否应该返回具有ID的所有行 是否大于table1 ID?
注意:我知道在 from 子句中切换表的顺序 将更改结果数据集。
select t1.ID, t1.Value,
t3.ID, t3.Value
from table1 as t1
left outer join
table3 as t3 on t1.ID > t3.ID;
结果:
1 First NULL NULL
2 Second 1 First
表1:
ID Value
1 First
2 Second
表3:
ID Value
1 First
2 Second
3 Third
4 Fourth
5 Fifth
6 Sixth
7 Seventh
8 Eighth
此查询返回我认为应该针对此类查询的结果表。但是第一个例子并不像我认为的那样有效。因为这匹配所有正确的表格,其ID小于当前的t1.ID,这是它应该如何工作的。 (见上文)
select t1.ID, t1.Value,
t3.ID, t3.Value
from table1 as t1
left outer join
table3 as t3 on t1.ID < t3.ID;
结果:
1 First 2 Second
1 First 3 Third
1 First 4 Fourth
1 First 5 Fifth
1 First 6 Sixth
1 First 7 Seventh
1 First 8 Eighth
2 Second 3 Third
2 Second 4 Fourth
2 Second 5 Fifth
2 Second 6 Sixth
2 Second 7 Seventh
2 Second 8 Eighth
答案 0 :(得分:2)
在第一种情况下,你会得到t1和t3中t1 id更大的每个行组合的结果,但是如果t1中的行没有生成行,则从t1获得行,并且t3行的NULL。
因此t1中的“1,First”行不大于t3中的任何行,因此您在输出中得到此结果:
1,First,NULL,NULL
对于t1中的“2,Second”行,它的id大于t3中的“1,First”行,因此您在输出中得到此结果:
2,Second,1,First
这一切都符合预期。
您的第二个查询也按预期工作 - 对于您拥有的数据集,结果与您使用INNER JOIN而不是LEFT JOIN完全相同,因为您在t1中没有任何行没有在t3中至少有一个匹配连接谓词。