MySQLの ケース式 と ケースステートメント の違いは何ですか?それらはいつ使用でき、一方を他方より使用することの利点は何ですか?
Caseステートメントの構文:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
ケース式の構文:
CASE
WHEN [condition] THEN result
[WHEN [condition] THEN result ...]
[ELSE result]
END
これらはほとんど同じように見えますが、Caseステートメントの最初の説明はThe CASE statement for stored programs implements a complex conditional construct.
では、ストアドプログラムで使用され、通常のクエリでは使用できないという大きな違いはありますか?私が遊んでいたクエリでこれを試してみましたが、失敗しました- sqlfiddle 。ただし、これが当てはまる場合は、ストアドプログラムでCase Expressionを使用しないのはなぜですか。
同じように見えるので、他に注意すべき構文上の違いはありますか?
CASE
式は値に評価されます。つまり、何らかの条件に基づいて、結果セットの1つに評価するために使用されます。
例:
SELECT CASE
WHEN type = 1 THEN 'foo'
WHEN type = 2 THEN 'bar'
ELSE 'baz'
END AS name_for_numeric_type
FROM sometable`
CASE
ステートメントは、条件に基づいて、一連のステートメントの1つを実行します。
例:
CASE
WHEN action = 'update' THEN
UPDATE sometable SET column = value WHERE condition;
WHEN action = 'create' THEN
INSERT INTO sometable (column) VALUES (value);
END CASE
どのように似ているかはわかりますが、ステートメントdoesは値に評価され、単独で使用できますが、式は式の一部である必要があります。クエリまたは割り当て。クエリにはステートメントを含めることができないため、クエリでステートメントを使用することはできません。何かに評価する必要がある式(クエリ自体はある意味でステートメントです)、たとえばSELECT CASE WHEN condition THEN UPDATE table SET something; END CASE
意味がありません。