结合使用IN和子查询

我正在尝试使用带有IN的子查询进行联接,但是出现错误“比较运算符IN无效”

有办法克服吗?

这是我的SQL不起作用:

    SELECT
    SIZE,COUNT(SIZE)

FROM
  (SELECT ITEM,MIN(SZCUBC) AS CUBE
        FROM XXX.ITEM 
        JOIN XXX.ITEMA ON IAITEM = ITEM 
        LEFT JOIN DB.SIZECD ON ITDhgt*ITDWTH*ITDDTH*QTY <= SZCUBC AND SIZE IN (SELECT SIZEB FROM DB.LOC WHERE BQTY>0 GROUP BY SIZEB) 
        WHERE IASOHQ >0 
        GROUP BY ITEM) t

LEFT JOIN DB.SIZECD T1 ON SZCUBC = CUBE 

GROUP BY
    SIZE

我正在使用下面的方法,但它不是动态的...

    SELECT
    SIZE,MIN(SZCUBC) AS CUBE
        FROM XXX.ITEM 
        JOIN XXX.ITEMA ON IAITEM = ITEM 
        LEFT JOIN DB.SIZECD ON ITDhgt*ITDWTH*ITDDTH*QTY <= SZCUBC AND SIZE IN ('TA','TB','TC','TD','TE','TF') 
        WHERE IASOHQ >0 
        GROUP BY ITEM) t

LEFT JOIN DB.SIZECD T1 ON SZCUBC = CUBE 

GROUP BY
    SIZE
hzh600606 回答:结合使用IN和子查询

您可以尝试用JOIN子句替换IN子句

(而且我在带有独特子句的子查询中删除了不带聚集功能的分组)

    SELECT
    SIZE,COUNT(SIZE)
FROM
  ( SELECT ITEM,MIN(SZCUBC) AS CUBE
        FROM XXX.ITEM 
        JOIN XXX.ITEMA ON IAITEM = ITEM 
        JOIN  (
          SELECT DISTINCT SIZEB 
          FROM DB.LOC 
          WHERE BQTY>0
        ) t2 ON t2.SIZEB = DB.SIZECD.SIZE
        LEFT JOIN DB.SIZECD ON ITDHGT*ITDWTH*ITDDTH*QTY <= SZCUBC 
        WHERE IASOHQ >0 
        GROUP BY ITEM
        ) t
LEFT JOIN DB.SIZECD T1 ON SZCUBC = CUBE 

GROUP BY  SIZE
,

针对每个DB2 docs可能存在相关错误:

  

ON子句不能包含子查询。

因此,请考虑使用WHERE替代品:

...
  (SELECT ITEM,MIN(SZCUBC) AS CUBE
   FROM XXX.ITEM 
   JOIN XXX.ITEMA ON IAITEM = ITEM 
   LEFT JOIN DB.SIZECD ON ITDHGT*ITDWTH*ITDDTH*QTY <= SZCUBC
   WHERE IASOHQ > 0 
     AND SIZE IN (SELECT SIZEB 
                  FROM DB.LOC 
                  WHERE BQTY > 0) 
   GROUP BY ITEM) t
,

假设SIZE属于DB.SIZECD

LEFT JOIN 
(
DB.SIZECD C  
JOIN (SELECT SIZEB FROM DB.LOC WHERE BQTY>0 GROUP BY SIZEB) G ON G.SIZEB = C.SIZE
) ON ITDHGT*ITDWTH*ITDDTH*QTY <= SZCUBC

代替:

LEFT JOIN DB.SIZECD ON ITDHGT*ITDWTH*ITDDTH*QTY <= SZCUBC AND SIZE IN 
(SELECT SIZEB FROM DB.LOC WHERE BQTY>0 GROUP BY SIZEB)

我们无法将带有DB.LOC的子选择移到LEFT JOIN之外以保留逻辑。

本文链接:https://www.f2er.com/3142881.html

大家都在问