SQL服务器: 假设我有一个表 Column1 和 Column2
为什么会这样:
SELECT Column1, * FROM MyTable ORDER BY Column1;
抛出错误:“列名‘Column1’不明确
但是这个:
SELECT Column1, * FROM MyTable ORDER BY MyTable.Column1;
不会抛出错误?
尝试运行这两个命令
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;