mySQL:筛选带有 CASE 的列

mySQL: Filter on a column with CASE

我有以下代码:

    SELECT
    t1.a
    t1.b
    CASE WHEN t1.c = Z THEN m
         WHEN t1.c = Y THEN n
         ELSE p END as m_or_n_or_p
    FROM t1

我可以加吗

WHERE m_or_n_or_p = m

最后并以这种方式过滤我的查询,还是我必须将其全部包装在另一个 SELECT 中?

MySQL 不允许在 where 子句中使用别名。如果您不想将查询包装在其他查询中,您总是可以将表达式从 select 列表复制到 where 子句:

SELECT t1.a
       t1.b
       CASE WHEN t1.c = Z THEN m
            WHEN t1.c = Y THEN n
            ELSE p
       END as m_or_n_or_p
FROM t1
WHERE  CASE WHEN t1.c = Z THEN m
            WHEN t1.c = Y THEN n
            ELSE p
       END = m