【问题标题】:mySQL: Filter on a column with CASEmySQL:使用 CASE 过滤列
【发布时间】:2018-03-22 01:27:41
【问题描述】:

我有以下代码:

    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 中?

【问题讨论】:

  • ...我可以添加...你试过看看会发生什么吗?
  • 是的,您可以添加这样的过滤器。但是,正如@B001 所说,您应该在发布问题之前尝试做一些事情。

标签: mysql sql select case where-clause


【解决方案1】:

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

【讨论】:

  • 我尝试将它与多个 WHERE... 一起使用,但出现错误。任何想法 ??例如:SELECT ... FROM t1 WHERE t1.a = C OR CASE WHEN ... END = m。 @Mureinik,有什么帮助吗?
  • @mlwn 我不确定我是否理解。您可以发布一个包含所有信息的新问题并在此处链接吗?
  • 这是一个打字错误..我后来想通了..我不得不将每个(CASE ... END)括在括号中..谢谢你的回答..完美无缺...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
相关资源
最近更新 更多