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地址,是否就不能做外网复制了