LEFT JOIN 语句使用有问题,请大家指点.着急.

speng_sp 2008-04-28 11:50:55
SELECT
PU_AppVouch.cCode AS [采购请购单号],PU_AppVouch.dDate AS [采购请购日期],
PU_AppVouch.cMaker AS [请购人],
pu_appvouchs.cInvCode AS [存货编码],


PO_Pomain.cPOID AS [采购订单号],PO_Pomain.dPODate AS [订单日期],
PO_Podetails.cInvCode AS [订单存货编码],PU_ArrivalVouch.cCode AS [采购到货单号],
PU_ArrivalVouch.dDate AS [到货日期],PU_ArrivalVouchs.cInvCode AS [到货存货编码] ,
RdRecord.cCode as [收发单据号] ,RdRecord.dDate as [入库日期] ,
RdRecord.cOrderCode as [采购订单号] , RdRecord.cARVCode as [采购到货单号] ,
RdRecords.cInvCode as [入库存货编码],PO_Pomain.cPOID AS [采购订单号],PO_Pomain.dPODate AS [采购订单日期],PO_Podetails.iQuantity AS [采购订单数量],PU_ArrivalVouchs.iQuantity AS [采购到货数量],RdRecords.iQuantity AS [入库数量]


FROM ( po_pomain JOIN PO_Podetails ON PO_Pomain.POID = PO_Podetails.POID )
left join ( PU_ArrivalVouch INNER JOIN PU_ArrivalVouchs ON PU_ArrivalVouch.ID = PU_ArrivalVouchs.ID )

on PO_Podetails.ID = pu_arrivalvouchs.iPOsID



left join ( rdrecord inner join rdrecords on rdrecord.id =rdrecords.id )

on pu_arrivalvouchs.autoid = rdrecords.iarrsid


left join ( pu_appvouch inner join pu_appvouchs on pu_appvouchs.id =pu_appvouch.id )


on pu_appvouchs.autoid = po_podetails.iappids


PU_AppVouch 是请购单主表
PU_AppVouchS 是请购单子表
PO_Pomain 采购订单主表
PO_Podetails采购订单子表
PU_ArrivalVouch到货单主表
PU_ArrivalVouchS 到货单子表
RdRecord 入库主表
RdRecords 入库子表

我要的结果是,请购这个商品后,能在这张表中可以看到请购品名,数量,订单日期及数量,到货日期,数量,入库数量并且写请购单,没有订,也会显示,有请有订没有到货和入库也显示,依次下推.这样的一个表.但现在这个代码pu_appvouchs.autoid = po_podetails.iappids中使用的是LEFT JOIN连接,这个执行完是请购部分数据都为空(其余查询数据结果正确).因为我要从请订到入库四个步骤.所以就是得改成RIGHT JOIN后,查询与现在结果不相符了.请专家给予指导.谢谢











...全文
96 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
speng_sp 2008-04-28
  • 打赏
  • 举报
回复
这个是用友的后台数据库,我想利用这个语句将同一种商品在这张表中显示请购单,订单,到货单,入库单的一些相关信息.我之前是将最后一行,放在FROM 后执行的,但我发现查询结果不对,查其原因是由于请购单表与后面到货单表及入库单连接完查询不对.所以请各位指点一下是不是由于语句毛病,还是我的想法有误,请各位指点一下.谢谢
dawugui 2008-04-28
  • 打赏
  • 举报
回复
表不少,复杂.
基本步骤:

select a.* , b.* , c.* , d.*
from a
left join b on a.id = b.id
left join c on b.id = c.id
left join d on c.id = d.id
where .........

不过如果用到group by 的话,建议将每个表分组后再left join如:

select a.* , m.* , n.* , t.*
from a
left join (select id , sum(val) from b where ... group by id ) on a.id = m.id
.....

-狙击手- 2008-04-28
  • 打赏
  • 举报
回复
没看明白

22,297

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧