选择 * 和按名称列会在 sql server 中创建不明确的列错误

问题描述 投票:0回答:1

SQL服务器: 假设我有一个表 Column1 和 Column2

为什么会这样:

SELECT Column1, * FROM MyTable ORDER BY Column1;

抛出错误:“列名‘Column1’不明确

但是这个:

SELECT Column1, * FROM MyTable ORDER BY MyTable.Column1;

不会抛出错误?

尝试运行这两个命令

t-sql
1个回答
0
投票
SELECT Column1, * FROM MyTable ORDER BY Column1;

有效

SELECT Column1, Column1, Column2 FROM MyTable ORDER BY Column1;

因此引擎会感到困惑,不知道使用哪个

Column1
进行排序。

另一方面,通过编写如下查询

SELECT Column1, * FROM MyTable ORDER BY MyTable.Column1;

它将按

Column1
排序,但它知道您指的是特定表中的特定
Column1
名称。想象一下,您有两个要连接的表,并且两个表都有带有
Column1
名称的列。引擎无法决定您指的是哪个表中的哪个
Column1
。在您的情况下,很明显它们是相同的,但在其他用例中则不然,因此会出现错误。

如果您不喜欢使用表名称,您可以为列使用不同的名称。

SELECT Column1 as c1, * FROM MyTable ORDER BY c1;

© www.soinside.com 2019 - 2024. All rights reserved.