【问题标题】:SQL CASE in SELECT and WHERE for selecting rowsSELECT 和 WHERE 中的 SQL CASE 用于选择行
【发布时间】:2015-11-27 15:19:41
【问题描述】:

有什么办法可以做到这一点:

SELECT *, CASE WHEN a=0 THEN "test1"
              WHEN a=1 THEN "test2"
         END AS a FROM table WHERE a LIKE "%test%"

所以它应该给我a=0 or a=1 的所有行。关键是我需要使用字符串“test”搜索这些行。

【问题讨论】:

  • 是的,只是不要忘记您的FROM 子句
  • 来自?所以我应该在这个yes中提出第二个查询?

标签: mysql select case


【解决方案1】:

在喜欢的地方给出案例,

SELECT * FROM table WHERE (CASE WHEN a=0 THEN "test1"
              WHEN a=1 THEN "test2"
         END)  LIKE "%test%"

【讨论】:

  • 这将给出与接受相同的答案,只需尝试
  • 确实,对不起,我误解了你昨天写的内容。
【解决方案2】:

你可以试试这个:

SELECT * FROM
    (SELECT *,CASE WHEN a=0 THEN "test1"
                  WHEN a=1 THEN "test2"
             END AS b 
  FROM  TableA) TableB
WHERE b LIKE "%test%"

Sqlfiddle

如果你想覆盖字段:

SELECT * FROM
    (SELECT CASE WHEN a=0 THEN "test1"
          WHEN a=1 THEN "test2"
     ELSE a
     END AS a 
  FROM  TableA) TableA
WHERE a LIKE "%test%"

Sqlfiddle

【讨论】:

  • 这是我部分需要的,但是如果我想在一个表中执行此操作并覆盖 a 怎么办?
  • 添加了覆盖表字段 a 的选择语句。请尝试一下。
【解决方案3】:

如果您想要 a=0 或 a=1 的所有行,您可以使用 IN 运算符

SELECT * FROM table WHERE a IN (0,1)

但如果你真的想用例,你需要 FROM 语句

【讨论】:

  • 是的,我只是忘记了,但这不是重点。我不会使用字符串“test”来搜索行。这就是我使用 CASE 的原因
【解决方案4】:

有两个 CASE 语句,一个用于语句,第二个用于表达式(您需要什么)。你应该做这样的事情-

SELECT CASE a WHEN 0 THEN 'test1' WHEN 1 THEN 'test2' END

这是一个语法 - Control Flow Functions

【讨论】:

    【解决方案5】:
    SELECT 
      *, 
      ( CASE a
          WHEN 0 THEN "test1" 
          WHEN 1 THEN "test2" 
      END) as a_txt
    FROM tableXY
    

    不知道你想用 where "%test%" 做什么

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 2013-03-23
      相关资源
      最近更新 更多