我想使用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异常..未知列'项'。我的问题是如何做到这一点?感谢所有人的进步。请帮我解决一下。
答案 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
: