+ -
当前位置:首页 → 问答吧 → 带条件的join方式

带条件的join方式

时间:2011-12-13

来源:互联网

SQL code
select isnull(sod.csocode,sod2.csocode) csocode,isnull(sod.iRowNo,sod2.iRowNo) irowno,isnull(so.ccusname,so2.ccusname) ccusname,inv.cinvname,。。
from rdrecord10 rd inner join rdrecords10 rds on rd.id=rds.id and rd.cvouchtype='10'
inner join inventory inv on inv.bsale=1 and rds.cinvcode=inv.cinvcode
left join so_sodetails sod on rds.isodid=cast(sod.isosid as varchar(20)) --如果rds.isodid存在就用这条关联
left join so_sodetails sod2 on rds.cmocode=sod2.csocode and sod2.cinvcode=rds.cinvcode --如果不存在就用这关联
where isnull(sod.csocode,sod2.csocode) is not null
group by sod.csocode,sod2.csocode,sod.irowno,sod2.irowno,so.ccusname,so2.ccusname,inv.cinvname,inv.cinvstd


这两条如何能并成一条,求解

作者: lzqdown   发布时间: 2011-12-13

用union

作者: happyflystone   发布时间: 2011-12-13

你已经写出来了啊

作者: ssp2009   发布时间: 2011-12-13

按照正常的左连接,把两个表都连接进去就行了.

因为不太清楚你的列,只能这么说一下.

作者: qianjin036a   发布时间: 2011-12-13

写全了大概是这样吧:
SQL code
select isnull(sod.csocode,sod2.csocode) csocode,isnull(sod.iRowNo,sod2.iRowNo) irowno,isnull(so.ccusname,so2.ccusname) ccusname,inv.cinvname,。。
from rdrecord10 rd inner join rdrecords10 rds on rd.id=rds.id and rd.cvouchtype='10'
inner join inventory inv on inv.bsale=1 and rds.cinvcode=inv.cinvcode
left join (select csocode,irowno,ccusname from so_somain so inner join so_sodetails sod on so.id=sod.id) as sod on rds.isodid=cast(sod.isosid as varchar(20)) --如果rds.isodid存在就用这条关联
left join (select csocode,irowno,ccusname from so_somain so2 inner join so_sodetails sod2 on so2.id=sod2.id) as sod2 on rds.cmocode=sod2.csocode and sod2.cinvcode=rds.cinvcode --如果不存在就用这关联
where isnull(sod.csocode,sod2.csocode) is not null
group by sod.csocode,sod2.csocode,sod.irowno,sod2.irowno,so.ccusname,so2.ccusname,inv.cinvname,inv.cinvstd

作者: qianjin036a   发布时间: 2011-12-13

因为用isnull判断,在sod 有null 时才会去用 sod2,所以,sod not null 时,sod2的行不会被连接.

作者: qianjin036a   发布时间: 2011-12-13

有没可能使用什么方法把这两条合并在一起呢

作者: lzqdown   发布时间: 2011-12-13

现在就是isodid与cmosode都存在时,就会有重复记录,因为两次left join都存在

作者: lzqdown   发布时间: 2011-12-13

你用了group by会去除重复的啊 ,或者distinct

作者: ssp2009   发布时间: 2011-12-13

SQL code
left join so_sodetails sod on rds.isodid=cast(sod.isosid as varchar(20)) and sod.cinvcode=rds.cinvcode --如果rds.isodid存在就用这条关联
left join so_sodetails sod2 on rds.cmocode=sod2.csocode and sod2.cinvcode=rds.cinvcode --如果不存在就用这关联

条件也可以这样写,就是想合并

作者: lzqdown   发布时间: 2011-12-13