首页 > 解决方案 > 如何显示匹配的 WHERE 条件?

问题描述

这是我正在尝试做的事情:

SELECT
  id, text, the_match
FROM
  comments
WHERE
  (lower(text) LIKE '%excellent%'
   OR lower(text) LIKE '%great%'
   OR lower(text) LIKE '%good%') AS the_match
ORDER BY len(text) ASC

SQL 无效。the_match不是有效的列。我试图显示WHERE子句中的哪个条件导致匹配。我怎样才能做到这一点?

标签: sqltsqlselect

解决方案


你可以使用一个CASE表达式:

SELECT
    id,
    text,
    CASE WHEN LOWER(text) LIKE '%excellent%' THEN 'excellent'
         WHEN LOWER(text) LIKE '%great%'     THEN 'great'
         WHEN LOWER(text) LIKE '%good%'      THEN 'good' END the_match
FROM comments
WHERE
    LOWER(text) LIKE '%excellent%' OR
    LOWER(text) LIKE '%great%' OR
    LOWER(text) LIKE '%good%'
ORDER BY
    LEN(text);

如果您想要为comments表中的每条记录添加一个标签,则只需删除该WHERE子句。在这种情况下,该the_match字段将NULL用于不匹配的记录。


推荐阅读