请教个数据库判断重复的问题。 student表中有4个电话字段,phone1,phone2,phone3,phone4,在录入学生的时候,要求这四个号码都不存在数据库中,才可以录入。 现在有个导入功能,要求把重复的记录返回,不重复的导入数据库。我从excel中读取数据,因为数据库比较大,我首先存到临时表中,想在临时表中判断,把重复的记录筛选出来,不重复的导入数据库。 临时表中的phone1,phone2,phone3,phone4要和学生表中的4个号码字段判断,这个sql怎么写,求助大家。 数据库 excel sql 判断重复 大数据导入 [解决办法] select * from tb a where not exists (select 1 from tb b where a.phone1<>b.phone1 and a.phone2<>b.phone2 and a.phone3<>b.phone3 and a.phone4<>b.phone4)
select phone1 as phone into #t from tb union all select phone2 from tb union all select phone3 from tb union all select phone4 from tb
create clustered index pk_ix_#t_phone on #t(phone)
select phone1 as phone into #t1 from #insert union all select phone2 from #insert union all select phone3 from #insert union all select phone4 from #insert
create clustered index pk_ix_#t1_phone on #t1(phone)
select a.phone into #p from #t a,#t1 b where a.phone=b.phone
create clustered index pk_ix_#p_phone on #p(phone) --直接写not in效率应该很低,分开比较好,过滤掉大部分的话应该好一点 select * from #insert where phone1 not in (select phone from #p) and phone2 not in (select phone from #p) and phone3 not in (select phone from #p) and phone4 not in (select phone from #p) [解决办法]
--先来一个全列表 WITH num as ( SELECT iphone1 AS num FROM TB UNION SELECT iphone2 AS num FROM TB UNION SELECT iphone3 AS num FROM TB
UNION SELECT iphone4 AS num FROM TB )
--然后判断要插入的是否跟这里个里面有重复
SELECT * FROM #temp WHERE NOT EXISTS(SELECT 1 FROM num WHERE num=#temp.number) --number 是需要导入的号码字段