在 OR 子句 SQL 中使用别名 [重复]

Posted

技术标签:

【中文标题】在 OR 子句 SQL 中使用别名 [重复]【英文标题】:Use alias in OR clause SQL [duplicate] 【发布时间】:2017-01-18 21:32:18 【问题描述】:

我正在尝试在 OR 子句中使用列别名,但我不断收到错误消息:“列名 'TEAM NAME' 无效”。我已经看到有关在 WHERE 子句中使用别名的线程,但我不确定 OR 是否可行。 这是我正在使用的:

[TEAM NAME] = CASE WHEN MAX(L.City) IN ('RY','BR') THEN 'Team 1'
WHEN MAX(L.City) IN ('JS','ND') THEN 'Team 2' 
WHEN MAX(L.City) IN ('QV','VE') THEN 'Team 3'
WHEN MAX(L.City) IN ('FB','RX') THEN 'Team 4'
ELSE '-' END,

这是我的 OR 子句

AND (U.Player IN ('Tom Thumb','Wallace Gromit') OR [Team Name] <> '-')

【问题讨论】:

如果你想使用别名,我认为你最好的选择是将你的主要当前查询包装在一个子查询中,并将该部分放在外面。或者,在不使用别名的情况下将该行夹在 having 子句中。例如having u.player in ('Tom Thumb','Wallace Gromit') or max(L.city) in ('ry','br','js','nd','qv','ve','fb','rx') 【参考方案1】:

不幸的是,你必须把它写出来。 PS 这应该在HAVING 子句中:

AND (U.Player IN ('Tom Thumb','Wallace Gromit') OR 
CASE WHEN MAX(L.City) IN ('RY','BR') THEN 'Team 1'
WHEN MAX(L.City) IN ('JS','ND') THEN 'Team 2' 
WHEN MAX(L.City) IN ('QV','VE') THEN 'Team 3'
WHEN MAX(L.City) IN ('FB','RX') THEN 'Team 4'
ELSE '-' END,
 <> '-')

AND (U.Player IN ('Tom Thumb','Wallace Gromit') OR 
MAX(L.City) NOT IN ('RY','BR','JS','ND','QV','VE','FB','RX'))

或者,您可以将整个查询视为子查询并从中进行选择

Select  * from (myquery) s where (U.Player IN ('Tom Thumb','Wallace Gromit') OR [Team Name] <> '-')

Similar issue here

Check out a basic example here

【讨论】:

注意:聚合放在HAVING 子句中。 我指的是你答案的前两部分。它们需要在having子句中,否则它们仍然会产生错误。 @zlk 聪明,100% 正确。更新 你的第二个解决方案在我把它放在 HAVING 子句中后对我来说效果很好——非常感谢你们俩的帮助!!【参考方案2】:

您是否尝试过在 SELECT 语句中以这种方式对其进行别名处理?

CASE WHEN MAX(L.City) IN ('RY','BR') THEN 'Team 1'
     WHEN MAX(L.City) IN ('JS','ND') THEN 'Team 2' 
     WHEN MAX(L.City) IN ('QV','VE') THEN 'Team 3'
     WHEN MAX(L.City) IN ('FB','RX') THEN 'Team 4'
     ELSE '-' END AS [TEAM NAME]

如果这是子查询或 CTE 的一部分,它将为您提供对来自它的外部查询请求数据中的该列的访问权限。

此外,WHERE 子句在任何查询/子查询中在 SELECT 子句之前运行,因此如果别名是在 SELECT 子句中创建的,则别名在 WHERE 子句中将不可用查询/子查询。

【讨论】:

以上是关于在 OR 子句 SQL 中使用别名 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 的 where 子句中使用别名 [重复]

查询五子句

在选择语句计算Oracle SQL中使用列别名[重复]

sql不允许在where子句比较中使用case变量[重复]

如何在mysqli准备好的语句中使用SQL LIKE子句[重复]

使用 SQL Server 2008 在 WHERE 子句中使用 SUBSTRING 函数 [重复]