【发布时间】:2016-03-30 18:59:25
【问题描述】:
我有一个复杂的查询,它跨多个列进行多次匹配,然后按相关性排序。
一切正常,直到我添加WHERE 'rank' > 0
然后返回一个空的结果集。
如果我删除“WHERE”语句,那么我可以在顶部看到所有匹配最高的结果。
有人可以帮我解决“在哪里”吗:-D 我错了!!
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
编辑
我删除了 rank 单词周围的单引号,现在得到“where 子句中的未知列排名”
【问题讨论】:
-
把
Rank这两个地方的单引号去掉试试 -
Unknown Column rank in WHERE Clause 如果我这样做,那么至少这是一些问题 - 我掩盖了问题 - 但我该如何解决这个问题? :-P
-
我认为 MySQL 不会支持带有
aliases的WHERE子句 - 检查 stackoverflow.com/questions/200200/… -
是的,您是对的-当您知道如何操作时,这很容易-更改为 HAVING rank > 0 并且工作正常。添加为答案,我将标记为正确 - 谢谢。
标签: mysql sql select case where-clause