别名上的类SQL

别名上的类SQL,sql,alias,where,Sql,Alias,Where,这可能吗 我试图对别名执行SQL语句,但出现错误 SELECT CASE PERSON_TYPE WHEN 'PER' THEN LAST_NAME ELSE COMPANY_NAME END AS FULLNAME, * FROM PERSON [WHERE FULLNAME LIKE '%AN%'] // Error FULLNAME - INvalid COlumn Name 否则,这就是我

这可能吗

我试图对别名执行SQL语句,但出现错误

SELECT 
      CASE PERSON_TYPE  WHEN 'PER' THEN LAST_NAME
                                   ELSE COMPANY_NAME
      END AS FULLNAME, *
FROM PERSON
[WHERE FULLNAME LIKE '%AN%'] // Error FULLNAME - INvalid COlumn Name
否则,这就是我正在使用的替代方案

WHERE (LAST_NAME LIKE '%AN%') OR (COMPANY_NAME LIKE '%AN%')

谢谢

你可以这样做

SELECT *
FROM (SELECT *, CASE PERSON_TYPE  
                  WHEN 'PER' THEN LAST_NAME 
                  ELSE COMPANY_NAME END AS FULLNAME
FROM PERSON ) t
WHERE FULLNAME LIKE '%AN%'

无法访问
中的字段别名,其中
。使用派生表/CTE作为替代,或在
中重复整个表达式,其中

mysql的诀窍:您可以将其设置为
分组方式

您有两种解决方案

一种是将全名传递给WHERE子句,如下所示:

SELECT 
      CASE PERSON_TYPE  WHEN 'PER' THEN LAST_NAME
                                   ELSE COMPANY_NAME
      END AS FULLNAME, PERSON.*
FROM PERSON
WHERE (PERSON_TYPE = 'PER' AND LAST_NAME LIKE '%AN%') OR (COMPANY_NAME LIKE '%AN%')
SELECT t.*
FROM (SELECT *, CASE PERSON_TYPE  
                  WHEN 'PER' THEN LAST_NAME 
                  ELSE COMPANY_NAME END AS FULLNAME
FROM PERSON ) t
WHERE t.FULLNAME LIKE '%AN%'
另一个是进行如下的内部查询:

SELECT 
      CASE PERSON_TYPE  WHEN 'PER' THEN LAST_NAME
                                   ELSE COMPANY_NAME
      END AS FULLNAME, PERSON.*
FROM PERSON
WHERE (PERSON_TYPE = 'PER' AND LAST_NAME LIKE '%AN%') OR (COMPANY_NAME LIKE '%AN%')
SELECT t.*
FROM (SELECT *, CASE PERSON_TYPE  
                  WHEN 'PER' THEN LAST_NAME 
                  ELSE COMPANY_NAME END AS FULLNAME
FROM PERSON ) t
WHERE t.FULLNAME LIKE '%AN%'

不,您不能在WHERE条件下使用别名。顺便说一句,您可能还希望从select语句中删除“,*”。这也会导致错误。

据我所知,这是不可能的,至少在SQL Server中是不可能的。当'PER'然后姓氏ELSE COMPANY'以'%AN%'结尾时,您需要使用
CASE PERSON\u TYPE,注意这个问题只有
sql
标记,您的两个查询都不符合标准sql。关于如何解决此问题的建议:将
*
更改为
PERSON.*
@onedaywhen done!谢谢你的建议,我使用了来自用户的查询,所以它也会处理它。