4

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

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

“错误”是 TableTwo 没有名为 columnTwo 的列(在 ORDER BY 子句中使用),但它运行良好。至少它在其中一个数据库上是这样,另一个应该抱怨。但我确定两者都没有 TableTwo.columnTwo。

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

这是一个简单的解决方法,但它已经存在了这么久而没有任何问题,这让我很烦恼。知道会发生什么吗?(或者我可以提供更多信息吗?)

4

1 回答 1

1

当将 ORDER BY 列表中的列引用绑定到 SELECT 列表中定义的列时,会忽略列的歧义,有时会忽略列前缀。这可能会导致结果集以意外的顺序返回。例如,接受带有单个两部分列 (.) 的 ORDER BY 子句,该列用作对 SELECT 列表中列的引用,但忽略表别名。考虑以下查询。SELECT c1 = -c1 FROM t_table AS x ORDER BY x.c1 执行时,列前缀在 ORDER BY 中被忽略。排序操作未按预期在指定的源列 (x.c1) 上发生;相反,它出现在查询中定义的派生 c1 列上。

来源 - “MSDN”

于 2013-06-10T08:23:57.853 回答