
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多数据.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)