SQL按不存在列排序

时间:2013-06-06 22:32:24

标签: sql sql-server database sql-server-2005

当我将查询中的错误复制到另一个(假设相同的)数据库并且失败时,我发现该错误应该是什么。它看起来像这样

SELECT  a.columnOne ,
    b.columnOne
FROM TableOne a
INNER JOIN TableTwo b
    ON a.id = b.id
WHERE a.Value = 0
ORDER BY a.ColumnOne ,
    b.ColumnTwo

'bug'是TableTwo没有名为columnTwo的列(在ORDER BY子句中使用),但运行正常。至少它在一个数据库上,另一个抱怨它应该。但我确信它们都没有TableTwo.columnTwo。

值得一提的是,TableOne DOES有一个名为columnTwo的列。

这是一个很容易解决的问题,但是这对我来说已经存在了很长时间没有任何问题。知道会发生什么吗? (或者我可以提供更多信息?)

1 个答案:

答案 0 :(得分:1)

  

WHEN将ORDER BY列表中的列引用绑定到列   在SELECT列表中定义,列歧义被忽略和列   前缀有时会被忽略。这可能导致结果集   以意想不到的顺序返回。例如,带有的ORDER BY子句   单个两部分列(。),用作   接受SELECT列表中的列的引用,但是表   别名被忽略。请考虑以下查询。 SELECT c1 = -c1 FROM   t_table AS x ORDER BY x.c1执行时,将忽略列前缀   在ORDER BY中。排序操作不会在指定的操作上发生   源列(x.c1)按预期;相反,它发生在派生的c1上   查询中定义的列。此查询的执行计划   显示首先计算派生列的值   然后对计算值进行排序

来源 - “MSDN”