带有条件SELECT参数的MySQL查询 - where子句中的未知列

时间:2017-02-01 10:34:01

标签: mysql

SQL查询:

SELECT          
    IF(
       pu.userPayeeType='fiziska', 
       CONCAT(pu.userName,' ', pu.userLastName), 
       pu.userCompanyName
    ) AS supplierName
FROM 
    publicUsers pu  
WHERE 
    supplierName LIKE  '%Jo%'

错误代码:1054。“where子句”

中的未知列'supplierName'

根据我的理解,SQL查询从底部向上“有点”进行评估和解析,这意味着WHERE子句还不知道别名“supplierName”是什么,并抛出此错误。

如何针对列内容创建条件SELECT?

数据库内容:

userPayeeType | userName | userLastName | userCompanyName
--------------+----------+--------------+------------------
   'fiziska'  |  John    | Doe          | 
--------------+----------+--------------+------------------
   'fiziska'  |  Joe     | Pie          |  
--------------+----------+--------------+------------------
   'other'    |          |              |  'Joes Company, Ltd'
--------------+----------+--------------+------------------

首选结果:

Row #  | supplierName 
-------+--------------------
  1.   | 'John Doe'
-------+--------------------
  2.   | 'Joe Pie'
-------+--------------------
  3.   | 'Joes Company, Ltd'

我是否遗漏了语法错误?

1 个答案:

答案 0 :(得分:1)

您不能在where子句中使用别名。您可以使用coalesce来获取第一个非null值。

SELECT          
    IF(
       pu.userPayeeType='fiziska', 
       CONCAT(pu.userName,' ', pu.userLastName), 
       pu.userCompanyName
    ) AS supplierName
FROM 
    publicUsers pu  
WHERE 
    coalesce(pu.userName,pu.userCompanyName) LIKE  '%Jo%';

甚至是列之间OR的简单位置。