gpt4 book ai didi

sql - 为什么这个语法无效?

转载 作者:行者123 更新时间:2023-12-04 22:14:53 25 4
gpt4 key购买 nike

以下代码:

SELECT JaguarStartupTime, CPU, AmountOfRam, UpdatedOn, *
FROM dbo.MachineConfiguration
WHERE ServerName = 'WashingtonDC01'
AND UpdatedOn > '11/21/2012'
ORDER BY JaguarStartupTime DESC

导致错误:不明确的列名“JaguarStartupTime”

但是,删除 ORDER BY 使其工作。此外,在 ORDER BY 子句前面加上表,如下所示,也可以使用:

SELECT JaguarStartupTime, CPU, AmountOfRam, UpdatedOn, *
FROM dbo.MachineConfiguration
WHERE ServerName = 'WashingtonDC01'
AND UpdatedOn > '11/21/2012'
ORDER BY dbo.MachineConfiguration.JaguarStartupTime DESC

这对我来说从来没有意义。谁能解释一下?

最佳答案

因为查询在 SELECT 子句中包含 *(所有列),其中还包含 JaguarStartupTime 列。

用外行的话来说:所以在检索结果时,该列显示了两次,然后当服务器尝试应用排序顺序时,不确定您指的是哪一列。

就个人而言,我会更改查询以消除在查询中使用 * 的情况,即使这意味着列出一长串列名。它是 best practice ,这样就可以避免这个问题了。


至于为什么加前缀有效,我在 MSDN documentation 中找到了这个。 :

In SQL Server, qualified column names and aliases are resolved to columns listed in the FROM clause. If order_by_expression is not qualified, the value must be unique among all columns listed in the SELECT statement.

这只是数据库引擎将 SQL 语句转换为执行计划的底层机制的一部分。

关于sql - 为什么这个语法无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13571705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com