質問

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を扱うでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top