2016-03-29 65 views
0

我希望你可以提供帮助,我在DB2,OR和OS中有两个车辆表,或者是将要交付的汽车的订单,而OS是那些已经存在的汽车出售,想要咨询OR表中的所有订单,但不是那些在OS表中取消的订单,我通过他们的状态('8')来标识取消的订单,我尝试了这个查询,但是我得到的订单只是在OS表中的,并不是所有的订单都在OS表中,我尝试了一个OUTER JOIN,但这不是我预期的结果。DB2查询加入

SELECT OR.OBNO, OR.ORSC, OS.SCLD 
FROM 
TABLE.OR LEFT OUTER JOIN TABLE.OS ON OR.OBNO=OS.OBNO 
WHERE OS.SLCD NOT IN ('8') 

这只是让我的所有订单在OS表,但不包括在手术台的那些(对或表没有SLCD的地位,我要排除所有那些在8个状态的订单OS表,但保留那些不在OS表中的)。

这一个是相同的结果。

SELECT OR.OBNO, OR.ORSC, OS.SCLD 
FROM 
TABLE.OR LEFT OUTER JOIN TABLE.OS ON OR.OBNO=OS.OBNO AND OS.SLCD NOT IN ('8') 

我希望有人能帮助我。非常感谢

+0

你的第二次尝试是错误的,并不会产生相同的结果。第一个看起来对我很好,但我不能完全理解你认为是错误的。因为它是一个左连接,它将返回左表的所有行 - 这是OR,但是你写了“OS表中的所有命令”。 – MichaelTiefenbacher

+0

是的,我认为左外连接会返回OR表中的所有行,但在这种情况下,只返回OS表中具有SLCD状态的订单,我还想检索仅在在OR表中,当我把NOT IN条件放在当我遇到问题时,它不会返回仅在OR表中的订单。感谢您的帮助,谢谢。 –

回答

0

我觉得这是检索这些数据的另一种方式:

SELECT OR.OBNO, OR.ORSC, OS.SCLD 
FROM TABLE.OR WHERE NOT EXISTS 
    (SELECT 1 FROM TABLE.OS WHERE OR.OBNO=OS.OBNO AND OS.SLCD = '8') 
+0

谢谢@mustaccio我尝试了你提到的查询,但它没有检索到数据,因为你提到的方式给我一个错误,我尝试了另一种方式查询:SELECT PFOR.ORNO,PFOR.ORSC,PFOS.SLCD FROM LPMXPFIL .PFOR PFOR内部连接LPMXPFIL.PFOS PFOS打开PFOR.ORNO = PFOS.OBNO 不存在不存在 (从LPMXPFIL.PFOS选择PFOS.SLCD PFOS PFOS.SLCD ='8') –