使用LIKE在CASE结果上搜索数据

时间:2013-05-21 08:35:37

标签: mysql sql database

我想使用LIKE sql语法来过滤我的数据库输出的结果。首先,我使用CASE和WHEN编码检索我想要使用的数据。如下所示...

            , CASE
            WHEN ACC.ACCOUNT_TYPE = 1 THEN BNK.DESCRIPTION1
            WHEN ACC.ACCOUNT_TYPE = 2 THEN BNK.DESCRIPTION2
            WHEN ACC.ACCOUNT_TYPE = 3 THEN BNK.DESCRIPTION3
            END AS item

然后,我想用LIKE语法检查这些结果。

        WHERE  ACC.RECORD_DEL_FLG = 0
               AND item LIKE '%%'

已经抛出了MYSQL异常..未知列'项'。我的问题是如何做到这一点?感谢所有人的进步。请帮我解决一下。

1 个答案:

答案 0 :(得分:2)

您不能使用在ALIAS子句的同一级别上创建的WHERE。你有两个选择,

一,将其包装在子查询中

SELECT *
FROM
(
   SELECT ....,
          CASE
            WHEN ACC.ACCOUNT_TYPE = 1 THEN BNK.DESCRIPTION1
            WHEN ACC.ACCOUNT_TYPE = 2 THEN BNK.DESCRIPTION2
            WHEN ACC.ACCOUNT_TYPE = 3 THEN BNK.DESCRIPTION3
            END item
   FROM tableName
) x
WHERE x.Item LIKE '%%'

其次,在WHERE子句

上使用整个表达式
WHERE ACC.RECORD_DEL_FLG = 0 AND 
      CASE WHEN ACC.ACCOUNT_TYPE = 1 THEN BNK.DESCRIPTION1
           WHEN ACC.ACCOUNT_TYPE = 2 THEN BNK.DESCRIPTION2
           WHEN ACC.ACCOUNT_TYPE = 3 THEN BNK.DESCRIPTION3
      END LIKE '%%'

您无法使用ALIAS的原因是因为在SQL Order of Operation中,WHERE子句在SELECT子句之前执行。这是列表SQL Order of Operation

  • FROM clause
  • WHERE子句
  • GROUP BY子句
  • HAVING条款
  • SELECT条款
  • ORDER BY子句