小编典典

在WHERE子句中使用CASE

sql

我的查询的简化版本

SELECT *
FROM logs 
WHERE pw='correct' AND CASE WHEN id<800 THEN success=1 ELSE END 
AND YEAR(timestamp)=2011

这是行不通的。我想做的是success=1仅添加带有的行id<800,否则忽略此检查。

我该怎么写呢?谢谢!

编辑:澄清一下,这是什么样子表

|id  | pw      | success |
--------------------------
|700 | correct | 1       |
|710 | correct | 1       |
|900 | correct | NULL    |
|999 | correct | 0       |

我正在尝试返回所有行,但pw不能忽略该列。


阅读 185

收藏
2021-04-15

共1个答案

小编典典

您不必使用CASE … WHEN,则可以使用OR条件,如下所示:

WHERE
  pw='correct'
  AND (id>=800 OR success=1) 
  AND YEAR(timestamp)=2011

这意味着,如果id <800,则条件必须为1才能成功。否则,这将是真实的。

这种情况不太常见,但是您仍然可以使用CASE WHEN,如下所示:

WHERE
  pw='correct'
  AND CASE WHEN id<800 THEN success=1 ELSE TRUE END 
  AND YEAR(timestamp)=2011

这意味着:success=1如果id <800,则返回(可以为TRUE或FALSE),否则始终返回TRUE。

2021-04-15