1

我想使用 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 Exception.. Unknown Column 'item'。我的问题是如何做到这一点?在此先感谢大家。请帮助我如何弄清楚。

4

1 回答 1

2

您不能使用在子句ALIAS的同一级别上创建的 that 。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子句执行 beforeSELECT子句。这是清单SQL Order of Operation

  • FROM 子句
  • WHERE 子句
  • GROUP BY 子句
  • HAVING 子句
  • 选择子句
  • ORDER BY 子句
于 2013-05-21T08:38:33.480 回答