如何让这个 Right outer join 起作用?

How do I get this Right outer join to work?

我正在尝试显示所有销售订单,如果有的话,还有送货单。我有一个显示所有订单的查询,但无论我如何将其加入下一个 table,我只会继续获得带有送货单的订单的结果。如果有 none 的记录,我希望 NULL 出现在送货单上。

我试过左联接、右联接和内联接,它们都返回相同数量的结果,这让我很困惑。我以为我在今天之前已经了解了连接。

这部分显示存在多少销售订单。我希望所有结果都出现在下一个查询中

select t0.docnum SalesOrder, t1.itemcode, t1.linenum rdr1line
from ordr t0 inner join rdr1 t1 on t1.docentry = t0.docentry
where t0.CANCELED = 'N';

这部分显示有多少销售订单有送货单,但不包括没有送货单的订单。

select t0.docnum SalesOrder, t1.itemcode, t2.docnum DelivNoteNum, t3.baseline inv1base, t1.linenum rdr1line, t3.linenum dln1line
from ordr t0 inner join rdr1 t1 on t1.docentry = t0.docentry
right outer join odln t2 on t2.docentry = t1.trgetentry
right outer join dln1 t3 on t3.docentry = t2.docentry and t3.baseline = t1.linenum and t3.ItemCode = t1.ItemCode
where t0.CANCELED = 'N' and t2.canceled = 'N';

每个 table 中的预期结果应该是相同的行数。实际效果以发货单为准。

使用 left join,而不是 right join。如果您想要所有订单,请从 table 开始。后续 table 上的过滤器应进入 on 子句:

select t0.docnum SalesOrder, t1.itemcode, t2.docnum DelivNoteNum,
       t3.baseline inv1base, t1.linenum rdr1line, t3.linenum dln1line   
from ordr t0 left join
     rdr1 t1
     on t1.docentry = t0.docentry left join
     odln t2
     on t2.docentry = t1.trgetentry and t2.canceled = 'N' left join
     dln1 t3
     on t3.docentry = t2.docentry and
        t3.baseline = t1.linenum and
       t3.ItemCode = t1.ItemCode
where t0.CANCELED = 'N';