ORA-01427“单行子查询返回多行”,带有两个案例[Oracle DB]

时间:2016-04-01 15:37:49

标签: sql oracle oracle11g

我遇到以下问题的问题,无法弄清楚我错在哪里。

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);

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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')
                     );

我非常确定这是您查询的目的。