这是一个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
答案 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#)