SQL - 是不是可以在哪里使用别名? [复制]

Posted

技术标签:

【中文标题】SQL - 是不是可以在哪里使用别名? [复制]【英文标题】:SQL - Is it possible to use alias in where? [duplicate]SQL - 是否可以在哪里使用别名? [复制] 【发布时间】:2017-05-04 18:37:02 【问题描述】:

我在 W3Schools 的 this 示例游乐场页面上尝试了以下 SQL。

SELECT CustomerID AS Id, CustomerName AS Customer
FROM Customers
WHERE Customer="Alfreds Futterkiste";

但我得到No value given for one or more required parameters. 作为回复。 如果我使用 CustomerName 而不是别名,它会起作用。

这是游乐场测试页面的失败还是不可能?

【问题讨论】:

WHERE 子句在 select 之前进行评估。因此,where 子句不知道您使用的别名。 no ... 在什么情况下不允许使用别名 我尝试了问题中的 sn-p,它在链接到的操场页面上工作。 可能取决于浏览器,因为数据库是在浏览器中创建的。 【参考方案1】:

WHERE 子句在选择之前进行评估。因此 where 子句不知道您使用的别名。

所以你需要使用原来的列名:

SELECT CustomerID AS Id, CustomerName AS Customer
FROM Customers
WHERE CustomerName="Alfreds Futterkiste";

如果你必须在 where 子句中使用别名,你可以使用子查询或 CTE(一种过度杀伤,可能会导致查询速度变慢):

SELECT * from (
    SELECT CustomerID AS Id, CustomerName AS Customer
    FROM Customers
) t WHERE Customer = "Alfreds Futterkiste";

【讨论】:

在 where 子句中使用别名“customer”。【参考方案2】:

丑陋,但在更大、更复杂的查询中很方便

SELECT * FROM
(SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers) as A

WHERE Customer = "Alfreds Futterkiste";

【讨论】:

特别是如果您在查询的其余部分中多次需要该引用【参考方案3】:

查看您的代码:

SELECT CustomerID AS Id, CustomerName AS Customer
FROM Customers
WHERE Customer="Alfreds Futterkiste";

要给客户表起别名,您可以执行以下操作:

SELECT c.CustomerID AS Id, c.CustomerName AS Customer
    FROM Customers c
    WHERE c.CustomerName="Alfreds Futterkiste";

现在 c 是客户的别名

不能在 where 子句中使用列别名,因为 where 子句在 select 之前执行。

【讨论】:

我认为他们的意思是是否可以使用列别名,而不是表别名。但否则更正。 知道了,更新答案 是的 Timothy G. 是对的,但还是谢谢你!【参考方案4】:

不,您不能在 WHERE 子句中引用列别名。

【讨论】:

以上是关于SQL - 是不是可以在哪里使用别名? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

sql server 数据复制,订阅者只能输入发布者的别名,不能输ip地址,是否就不能做外网复制了

SQL Server 是不是可以使用 PHP 从 UNION 查询中返回不同的别名列名?

为啥 Oracle SQL 不允许我们在条件中使用别名?

这个特殊的别名 SQL 列是不是有问题?

SQL的别名和SQL的执行顺序和SQL优化

SQL CE 复制的好演示在哪里?