一般的注意事項
ケースには、CASE の後に値がある場合とない場合の 2 種類があります。
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END
ケースの後の値を可能な値のリストと比較します。
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 条件の後に値を返します。
2nd版を使っているので、1や2を入れる必要はありません。
コードがどのように機能するかを調査する
あなたの場合、2番目のタイプのクエリを1番目のタイプにキャストしようとするため、1の正しい結果が得られます。式を評価し、結果を 1 と比較します。1 と TRUE は同じ値であるため、機能します。
2 を入力すると、2 は TRUE でも FALSE でもないため、常に ELSE ブランチに移動します。2 の代わりに 0 を設定しようとすると、最初の false 式の結果が得られます。
mysql> SELECT CASE 0 WHEN 2<0 THEN 'true' ELSE 'false' END;
+----------------------------------------------+
| CASE 0 WHEN 2<0 THEN 'true' ELSE 'false' END |
+----------------------------------------------+
| true |
+----------------------------------------------+