質問
MySQLサーバのバージョン5.0.45。次の点を考慮します:
( SELECT CASE
WHEN t.group_id = 12 THEN 'yes'
ELSE 'no'
END
FROM sample_table t
WHERE t.user_id = 2
AND t.group_id = 12 ) as foo
私が期待するように、より大きな文のこのサブクエリは、ほとんどの時間「はい」または「いいえ」の文字列値を得ていない、動作します。それは理想的ではないのですが、それはあなたが他の誰かのコードに取り組んために得るものです!
しかし、時には選択は正当ケースfooがNULLに設定された空のセットを返すことができます。これは、実際にアプリケーションを破壊しないが、それは刺激性です。私はfooが常に一致する行がテーブルに存在しない場合でも、いずれかの「はい」または「いいえ」できなくなります保証することができます方法はありますか?
解決
それはスカラサブクエリだ場合、その後、これを使用する(すなわち、あなたがFROM句ではないで、SELECT
またはWHERE
句で使用しています。。):
IF(
EXISTS
(
SELECT NULL
FROM sample_table t
WHERE t.user_id = 2
AND t.group_id = 12
), 'yes', 'no'
)
あるいは、この:
COALESCE(
(
SELECT 'yes'
FROM sample_table t
WHERE t.user_id = 2
AND t.group_id = 12
), 'no')
他のヒント
あなたは空のセットが「いいえ」の場合を表現したい場合、あなたはおそらく、代わりにこれを行うことができます:
select ... where ... (foo = 'no' or foo is null)
このは大幅にあなたのサブクエリを変更することなく、両方のcaseesを扱うでしょう。
所属していません StackOverflow