44

MySQLのCase 式Case ステートメントの違いは何ですか? それらはいつ使用できますか? また、一方を他方よりも使用する利点は何ですか?

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 を使用しないのはなぜでしょうか?

同一のように見えるため、他に注意すべき構文上の違いはありますか?

4

1 に答える 1

67

式は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

これらがいかに似ているかがわかりますが、ステートメントは値に評価されず、単独で使用できますが、式は式の一部である必要があります (クエリや代入など)。クエリにはステートメントを含めることができず、何かに評価する必要がある式 (クエリ自体はある意味ではステートメントです) のみを含めることができないため、クエリでステートメントを使用することはできません。たとえばSELECT CASE WHEN condition THEN UPDATE table SET something; END CASE、意味がありません。

于 2012-09-15T11:15:51.763 に答える