SQL left join 数据重复
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL left join 数据重复相关的知识,希望对你有一定的参考价值。
是这样的 有一张物料表BK_goods(主键是goodsId),另有一张BOM表SJ_nparts(主键partId,同事包含父类节点parentId,parentId包含在partId),现有一张表Test以本及物料编码和父级物料编码为联合主键,现在我查询出来的届国际有重复所以无法向Test表中插入数据。
select bg.goodsCode as itemno,isnull(bg2.goodsCode,'0000') as f_itemnofrom [MESBT].[dbo].[SJ_nParts] sn--查询本级物料及数量left join [MESBT].[dbo].[BK_goods] bg on sn.goodsId=bg.goodsId--查询上级物料left join [MESBT].[dbo].[SJ_nParts] sn2 on sn2.parentId=sn.partIdleft join [MESBT].[dbo].[BK_goods] bg2 on sn2.goodsId=bg2.goodsId
请教怎么处理!
2、考虑部分记录可能已经存在于 Test 表,所以 Insert into Test 的时候 加个 Where 语句
例如
Insert Into Test (itemno,f_itemno)
select distinct bg.goodsCode as itemno,isnull(bg2.goodsCode,'0000') as f_itemno
from [MESBT].[dbo].[SJ_nParts] sn
--查询本级物料及数量
left join [MESBT].[dbo].[BK_goods] bg on sn.goodsId=bg.goodsId
--查询上级物料
left join [MESBT].[dbo].[SJ_nParts] sn2 on sn2.parentId=sn.partId
left join [MESBT].[dbo].[BK_goods] bg2 on sn2.goodsId=bg2.goodsId
Left Join Test t On bg.goodsCode = t.itemno And isnull(bg2.goodsCode,'0000') = t.f_itemno
Where t.itemno is null And t.f_itemno is null 参考技术A select distinct 再加上后面那段追问
没用的
追答select distinct * from (
select bg.goodsCode as itemno,isnull(bg2.goodsCode,'0000') as f_itemno
from [MESBT].[dbo].[SJ_nParts] sn
--查询本级物料及数量
left join [MESBT].[dbo].[BK_goods] bg on sn.goodsId=bg.goodsId
--查询上级物料
left join [MESBT].[dbo].[SJ_nParts] sn2 on sn2.parentId=sn.partId
left join [MESBT].[dbo].[BK_goods] bg2 on sn2.goodsId=bg2.goodsId
)
SQL语句多表left join SUM出现的重复数据问题!
A表生产批号唯一
我做出来left join 结果领料数量会多出来 因为A对BCD表都是一对多的关系 C表与D表是多对多的关系
from a
left join (select 生产批号,sum(领料数量) as 领料数量 from b group by 生产批号) bb
on a.生产批号=b.生产批号
left join (select cc.生产批号,sum(d.完工数量) as 完工数量
from (select distinct 生产批号,rcid from c) cc,d
where c.rcid=d.rcid
group by c.生产批号
) dd on a.生产批号=dd.生产批号
;追问
消息 4104,级别 16,状态 1,第 1 行
无法绑定由多个部分组成的标识符 "b.生产批号"。
消息 4104,级别 16,状态 1,第 1 行
无法绑定由多个部分组成的标识符 "c.RCID"。
消息 4104,级别 16,状态 1,第 1 行
无法绑定由多个部分组成的标识符 "c.生产批号"。
select a.*,bb.领料数量,dd.完工数量
from a
left join (select 生产批号,sum(领料数量) as 领料数量 from b group by 生产批号) bb
on a.生产批号=bb.生产批号
left join (select cc.生产批号,sum(d.完工数量) as 完工数量
from (select distinct 生产批号,rcid from c) cc,d
where c.rcid=d.rcid
group by c.生产批号
) dd on a.生产批号=dd.生产批号
以上是关于SQL left join 数据重复的主要内容,如果未能解决你的问题,请参考以下文章
SQL语句多表left join SUM出现的重复数据问题!
执行sql语句,table1 left join table2 on...... 此时table2有重复的数据,从而导致最后的临时表也会出现
Transact-SQLSQL Server自动把left join自动转化为inner join以及关联时的数据重复问题