2つの列を入力として使用してmysqlのcase式を使用します。これが私がコードを書式化する方法です。すべてのコードスニペットは、開始時にSet @a = 0; Set @b = 0;
を使用しますが、これらの値は変更できます。私自身のユースケースには、それぞれ2つ以上の値があります(それぞれ2つ以上)。2つの入力列を持つMySql CASE式
SELECT
CASE (@a , @b)
WHEN (0 , 0) THEN 'Both zero'
WHEN (1 , 0) THEN 'a is 1'
WHEN (0 , 1) THEN 'b is 1'
WHEN (1 , 1) THEN 'both 1'
ELSE NULL
END;
このようにcase文を使用すると、MySqlはError Code: 1241. Operand should contain 1 column(s)
をスローします。 参考のために、以下の両方の作業がありますが、私は上記の理由が不思議に思えます。
SELECT
IF((@a , @b) = (0 , 0),
'Both zero',
IF((@a , @b) = (1 , 0),
'a is 1',
IF((@a , @b) = (0 , 1),
'b is 1',
IF((@a , @b) = (1 , 1), 'both 1', NULL))));
と
SELECT
CASE
WHEN (@a , @b) = (0 , 0) THEN 'Both zero'
WHEN (@a , @b) = (1 , 0) THEN 'a is 1'
WHEN (@a , @b) = (0 , 1) THEN 'b is 1'
WHEN (@a , @b) = (1 , 1) THEN 'both 1'
ELSE NULL
END;
だから、質問:複数列の比較を行うとき は、私が最初のコードスニペットのようにCASE式を使用することはできますか? もしそうなら、例を挙げてください。そうでない場合は、どうしてですか?
第3の方法は、自分のユースケースでは完全に実行可能ですが、@aと@bがselect文であった場合、それはそうではありません。
- 選択文であった場合は、入力を1回だけ実行します。
- 任意の入力数に対して簡単に拡張できます。
- 入力タイプ(IE(@ a、@ b)=(0、 '!@#$:abc')はチェックする有効なケースです)には関係ありません。
可能ではありません。あなたは 'case'ステートメントに"値のリスト "を持つことはできません。 'case'は1つのSINGLE値をとり、それだけです。 –