2016-04-01 3 views
0

次の問合せに問題があり、わたしが間違っている箇所を見つけられません。ORA-01427 TWO CASES [Oracle DB]を使用して「1行の副問合せで複数の行が戻されます」

SELECT * FROM TBLCUSTCHANNELACCT b WHERE 
(CASE WHEN NVL('0001, 0015', '-1') = '-1' THEN NVL('0001, 0015', '-1') 
     ELSE b.productid END 
     IN 
    CASE WHEN NVL('0001, 0015', '-1') = '-1' THEN NVL('0001, 0015', '-1') 
     ELSE 
    (SELECT a.product_id FROM tblcfgproductdetail a WHERE a.productcode IN ('0001', '0015')) 
END); 

ありがとうございました。

+2

あなたはクエリの結果を返すことができる 'case'を持っています。そのクエリは複数のレコードを返すので、 'case'はそれを扱うことができません。なぜ 'NVL( '0001、0015'、 '-1')'?テスト専用ですか? – Aleksej

+0

@Aleksej本当にありがとうございます。回避策はありますか?「a.productcode IN( '0001')」のような値を1つだけ入力すると、正常に動作します。 –

+0

サンプルデータと希望の結果を投稿してください。これはあなたのニーズを理解するのに役立ちます。 – Aleksej

答えて

2

caseを使用しないでください。基本ロジックを使用してください:

SELECT b.* 
FROM TBLCUSTCHANNELACCT b 
WHERE ('0001, 0015' IS NULL) OR 
     b.productid IN (SELECT a.product_id 
         FROM tblcfgproductdetail a 
         WHERE a.productcode IN ('0001', '0015') 
        ); 

これはあなたのクエリの意図であると確信しています。

+0

本当にありがとう、この1つは私の問題を解決しました... –

関連する問題