数据库
首页 > 数据库> > MySQL CASE WHEN where子句导致失败

MySQL CASE WHEN where子句导致失败

作者:互联网

我有一个复杂的查询,可以跨多个列执行多个匹配,然后按相关性进行排序.

一切正常,直到我添加WHERE’rank’> 0

然后返回一个空结果集.

如果我删除’WHERE’语句,那么我可以看到顶部匹配最高的所有结果.

有人可以帮我解决’在哪里’: – 我出错!

SELECT *, CASE WHEN companyName = 'gfdgfs' THEN 2 ELSE 0 END 
+ CASE WHEN companyName LIKE '%gfdgfs%' THEN 1 ELSE 0 END 
+ CASE WHEN companyName = 'potato' THEN 2 ELSE 0 END 
+ CASE WHEN companyName LIKE '%potato%' THEN 1 ELSE 0 END 
+ CASE WHEN address1 = 'gfdgfs' THEN 2 ELSE 0 END 
+ CASE WHEN address1 LIKE '%gfdgfs%' THEN 1 ELSE 0 END 
+ CASE WHEN address1 = 'potato' THEN 2 ELSE 0 END 
+ CASE WHEN address1 LIKE '%potato%' THEN 1 ELSE 0 END 
AS rank 
FROM clients 
WHERE rank > 0
ORDER BY rank

编辑

我删除了排名单词周围的单引号,现在获得’where子句中的未知列排名’

解决方法:

从排名中删除单引号并尝试.无论如何,我不认为MySQL会支持带别名的WHERE子句 – 检查this.

使用HAVING而不是WHERE:

SELECT *,CASE WHEN companyName =’gfdgfs’THEN 2 ELSE 0 END
  公司名称LIKE’%gfdgfs%’,然后1 ELSE 0 END
  公司名称=’土豆’时的情况那么2结束0结束
  公司名称LIKE’%potato%’然后1 ELSE 0 END
  例如,当address1 =’gfdgfs’时,那么2 ELSE 0 END
  例如,当address1 LIKE’%gfdgfs%’时,那么1结束0结束
  例如,当地址1 =’马铃薯’时,那么2结束0结束
  例如,当地址1喜欢’%马铃薯%’时,那么1结束0结束
AS等级
来自客户
等级> 0
按排名排序

标签:mysql,sql,select,case,where-clause
来源: https://codeday.me/bug/20190706/1397343.html