一般注意事项
有两种情况:在 CASE 之后有值和没有值。
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END
它将 case 之后的值与可能值列表进行比较:
mysql> SELECT CASE 1 WHEN 1 THEN 'one'
-> WHEN 2 THEN 'two' ELSE 'more' END;
-> 'one'
此版本将 case 之后的值与 after 给出的值进行比较WHEN
。
2.
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
-> 'true'
此版本将在第一个 true 条件后返回值。
由于您使用的是 2-nd 版本,因此您不需要放置 1 或 2。
调查,你的代码是如何工作的
在您的情况下,您会得到 1 的正确结果,因为它尝试将 2-nd 类型查询转换为 1-st 类型。它评估表达式并将结果与 1 进行比较。1 和 TRUE 是相同的值,这就是它起作用的原因。
当您键入 2 时,它总是转到 ELSE 分支,因为 2 既不是 TRUE 也不是 FALSE。如果您尝试设置 0 而不是 2,它将为您提供第一个 false 表达式的结果:
mysql> SELECT CASE 0 WHEN 2<0 THEN 'true' ELSE 'false' END;
+----------------------------------------------+
| CASE 0 WHEN 2<0 THEN 'true' ELSE 'false' END |
+----------------------------------------------+
| true |
+----------------------------------------------+