我有一个复杂的查询,可以跨多个列执行多个匹配,然后按相关性进行排序.
一切正常,直到我添加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
按排名排序