首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >怎样才能让这个正确的外连接起作用?

怎样才能让这个正确的外连接起作用?
EN

Stack Overflow用户
提问于 2019-05-07 02:22:04
回答 1查看 41关注 0票数 0

我正在尝试显示所有的销售订单,如果他们有的话,还有发货单。我得到了一个显示所有订单的查询,但是无论我如何将它连接到下一个表,我都会继续得到只有带有交货单的订单的结果。如果没有记录在案的交货单,我希望NULL在场。

我尝试过左连接、右连接和内连接,它们都返回相同数量的结果,这让我感到困惑。在今天之前,我以为我已经对joins有了一个理解。

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

代码语言:javascript
运行
复制
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';

此部分显示具有交货单的销售订单的数量,但不包括没有交货单的订单。

代码语言:javascript
运行
复制
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';

预期结果应该是每个表中的行数相同。实际结果仅与交货单一起订购。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-07 02:30:25

使用left join,而不是right join。如果你想要所有的订单,那就从那张桌子开始。后续表上的过滤器应该放在on子句中:

代码语言:javascript
运行
复制
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';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56010484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档