没有获得任何数据是最后选择好吗?

时间:2015-05-13 13:08:53

标签: sql db2-400

这是一个db2查询,但与SQL Server一样。我期待这里的数据 拥有没有货运信贷行(onStop()

的所有行

这是订单数据。基于每个销售商品的所有订单sb多行都有一行:

FRTCRDM

所以在这里,我们的运费折扣为2.00。我想要的是,所有记录中没有Order# Item qty Price etc 123 Widget1 1 10.00 123 Widget2 2 20.00 123 FRTWDG 1 5.00 123 FRTCRDM 1 2.00 ,没有运费折扣。所以我们不想要上面的例子。如果最后一行丢失,我们会想要它。

FRTCRDM

2 个答案:

答案 0 :(得分:2)

where的最后一个子句中,您需要从子查询中删除表前缀:

NOT IN (SELECT idord# FROM astdta.oeindlid WHERE idprt# = 'FRTCRDM')

现在您指的是外部表t01的ID,而not in将无法按预期工作。

答案 1 :(得分:0)

它可能是SELECT t01.idord#,它会产生一个相关的子查询(事实上它idord# not in (idord#)总是错误的),将其更改为SELECT idord#

SELECT T01.IDORD#, T01.IDDOCD, T01.IDPRT#, 
       T01.IDSFX#, T01.IDSHP#, T01.IDNTU$, T01.IDENT# ,
       (T01.IDNTU$ * T01.IDSHP# ) AS LINTOT, 
       T02.IARCC3, T02.IAPRLC , T01.IDORDT, T01.IDHCD3 
FROM ASTDTA.OEINDLID T01
  INNER JOIN ASTDTA.ICPRTMIA T02 ON T01.IDPRT# = T02.IAPRT# 
WHERE t01.iddocd > 20131231
  AND t01.IDHCD3 = 'MDL'    
  AND t01.idord# NOT IN (SELECT idord# FROM astdta.oeindlid b
                         WHERE idprt# = 'FRTCRDM')

或者使用NOT EXISTS将其更改为正确的相关子查询:

SELECT T01.IDORD#, T01.IDDOCD, T01.IDPRT#, 
       T01.IDSFX#, T01.IDSHP#, T01.IDNTU$, T01.IDENT# ,
       (T01.IDNTU$ * T01.IDSHP# ) AS LINTOT, 
       T02.IARCC3, T02.IAPRLC , T01.IDORDT, T01.IDHCD3 
FROM ASTDTA.OEINDLID T01
  INNER JOIN ASTDTA.ICPRTMIA T02 ON T01.IDPRT# = T02.IAPRT# 
WHERE t01.iddocd > 20131231
  AND t01.IDHCD3 = 'MDL'    
  AND NOT EXISTS
    (SELECT * FROM astdta.oeindlid b
     WHERE idprt# = 'FRTCRDM'
       AND t01.idord# = b.idord#)