0

製品テーブルから製品を選択するために MySQL CASE ステートメントを使用しようとしています。

私はこれを持っています:

SELECT art.a,art.b,art.c
FROM products AS art
   WHERE art.inventory != "0"
   # filter by param_reference_iln (seller ID = vARCHAR(13) )
   CASE        
    WHEN param_reference_iln = '3333333333333' THEN AND art.iln = '1111111111111' OR art.iln = '2222222222222'
    WHEN param_reference_iln = '8888888888888' THEN AND art.iln = '7777777777777'
    ELSE AND art.iln NOT IN ('1111111111111','2222222222222','7777777777777')
   END CASE;

両方のCASE バリアントを試しましたが、どちらも機能しません。

質問:
何が間違っていますか?

4

3 に答える 3

1

WHERE 句に CASE を使用できるかどうかはわかりません。とにかく、ここでは厳密なブール構文を使用する必要があります。

SELECT art.a,art.b,art.c
FROM products AS art
WHERE art.inventory != "0"
    AND (
        (param_reference_iln = '3333333333333' AND (art.iln = '1111111111111' OR art.iln = '2222222222222'))
        OR
        (param_reference_iln = '8888888888888' AND art.iln = '7777777777777')
        OR
        art.iln NOT IN ('1111111111111','2222222222222','7777777777777')
    );
于 2012-06-19T11:10:11.727 に答える
1

a を使用してCASEwhere 句を動的に構築することはできませんTHEN AND ...AND

通常のインライン ロジックを使用する必要があります。

WHERE art.inventory != "0"
AND (
    (param_reference_iln = '3333333333333' AND art.iln IN ('1111111111111', '2222222222222'))
  OR  
    (param_reference_iln = '8888888888888' AND  art.iln = '7777777777777') 
  OR
    (art.iln NOT IN ('1111111111111','2222222222222','7777777777777'))
)
于 2012-06-19T11:11:06.607 に答える
0

これは選択用ではなく、ストアド プロシージャ用です。投稿したページを下にスクロールすると、

于 2012-06-19T11:08:39.593 に答える