mySQL:使用 CASE 过滤列

rad*_*dek 0 mysql sql select case where-clause

我有以下代码:

    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
Run Code Online (Sandbox Code Playgroud)

我可以添加吗

WHERE m_or_n_or_p = m
Run Code Online (Sandbox Code Playgroud)

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

Mur*_*nik 5

MySQL 不允许在where子句中使用别名。如果您不想将查询包装在附加查询中,您始终可以将表达式从选择列表复制到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
Run Code Online (Sandbox Code Playgroud)