Join DB2查询联接

Join DB2查询联接,join,db2,Join,Db2,我希望您能对此提供帮助,我在DB2中有两个vehicle表,OR和OS,或者是将要交付的汽车的订单所在地,OS是那些已经售出的汽车,希望查阅OR表中的所有订单,但不是OS表中取消的订单,我通过状态“8”来识别取消的订单,我尝试了这个查询,但是我得到的订单只是OS表中的订单,不是所有的订单都在OS表中,我尝试了外部联接,但这不是我期望的结果 SELECT OR.OBNO, OR.ORSC, OS.SCLD FROM TABLE.OR LEFT OUTER JOIN TABLE.OS ON OR.O

我希望您能对此提供帮助,我在DB2中有两个vehicle表,OR和OS,或者是将要交付的汽车的订单所在地,OS是那些已经售出的汽车,希望查阅OR表中的所有订单,但不是OS表中取消的订单,我通过状态“8”来识别取消的订单,我尝试了这个查询,但是我得到的订单只是OS表中的订单,不是所有的订单都在OS表中,我尝试了外部联接,但这不是我期望的结果

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状态的订单。我想排除OS表中所有状态为8的订单,但保留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')

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

我认为有另一种方法可以检索这些数据:

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

您的第二次尝试是错误的,不会产生相同的结果。第一个看起来不错,但我不能完全理解你认为它有什么问题。由于它是一个左联接,它将返回左表中的所有行-这是或,但您在OS表中写入了所有订单。是的,我认为左外部联接将返回或表中的所有行,但在这种情况下,只返回OS表中具有SLCD状态的订单,我也希望检索仅在OR表中的订单数据,当我设置NOT in条件时,就是当我遇到问题时,它不会返回仅在OR表中的订单。感谢您的帮助谢谢谢谢@mustaccio我尝试了您提到的查询,但没有检索到数据,我尝试了另一种方式,因为您提到的方式给了我一个错误:选择PFOR.ORNO,PFOR.ORSC,PFOS.SLCD来自LPMXPFIL.PFOR PFOR内部加入PFOR上的LPMXPFIL.PFOS PFOS。ORNO=PFOS.OBNO如果不存在,请从LPMXPFIL.PFOS PFOS.SLCD选择PFOS.SLCD='8'