SQL left join 数据重复

SQL left join 数据重复,第1张

1、Select 语句 加 Distinct

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表和B表关联(关联列为A),但B表中存在一些粒度重复(A、B、C列),而我要去重复

select * from tableA a

join (select distinct A,B,C tableB) b on a.A=b.A

select 11月考勤表.name as 姓名,

员工表.card as 卡号,

11月考勤表.bmmc as 部门,

11月考勤表.skrq as 刷卡日期,

11月日历.weeks as 星期,

11月考勤表.sksj as 刷卡时间

into monthdata

from 11月考勤表 inner join 11月日历 on kqrq=skrq join 员工表 and 11月考勤表.no=员工表.no

where skrq between '2007-11-01' and '2007-11-30'

在join 前加个inner

在只有join的情况下,被认为是full join ,也就是笛卡尔积了,所以会重复N多数据.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10826296.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存