涉及连接的SQL查询中的连续记录

时间:2013-04-21 03:09:24

标签: sql tsql sql-server-2005 left-join

我知道(没有order by子句)SQL不对结果集的顺序做出任何保证。但是,对于涉及一个或多个联接的查询,我可以对结果集中相关项的连续性做出任何假设吗?

例如,如果我有像

这样的查询
select * from A left join B on P(x) left join C on Q(x)

我可以假设与 A 中特定行对应的所有记录在结果集中都是连续的吗?

1 个答案:

答案 0 :(得分:1)

不,你不能。除非存在order by子句,否则永远不会指定查询结果。

这是一个真实的例子,结果不是连续的。并行散列连接根据连接键分隔不同处理器上的表。然后在结果可用时编译结果。因此,一些结果来自一个处理器,一些来自另一个处理器,依此类推。

或者,在另一种情况下,您可能正在使用索引查找。但是,SQL Server可能决定在A而不是B上使用索引,并在B而不是A中顺序遍历行。相同的id可能在表B中出现多次。因此,给定的行A可能会出现在结果中,无论B.id = A.id。