为什么我的SQL查询不能正常工作?

时间:2014-06-11 14:33:06

标签: sql-server

在下面的查询中,我想将外连接保留在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

1 个答案:

答案 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中至少有一个匹配连接谓词。