SELECT 和 WHERE 中的 SQL CASE 用于选择行
Posted
技术标签:
【中文标题】SELECT 和 WHERE 中的 SQL CASE 用于选择行【英文标题】:SQL CASE in SELECT and WHERE for selecting rows 【发布时间】: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中提出第二个查询?
【参考方案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%" 做什么
【讨论】:
以上是关于SELECT 和 WHERE 中的 SQL CASE 用于选择行的主要内容,如果未能解决你的问题,请参考以下文章
简述SELECT语句中的FROM、WHERE以及ORDER BY子句的作用。SQL Server
SQL - SELECT WHERE 存储在 JSON varchar 中的日期大于或小于固定日期
SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列 'id'(SQL:select * from `songs` where `id` = 5 limit 1)