首页新闻找找看学习计划

面试难题:如何将以上的sql语修改后重复执行不会插入重复数据

0
悬赏园豆:10 [已解决问题] 解决于 2018-10-03 15:35

A B 两个表结构完全相同 都是 id (自增) name , amount
insert into b (customername,amount) select customername,amount from a where a.amount<500000

现在在上面那条语句的前提下,
将以上的insert 语句进行改造成可以重复执行的语句,重复执行后不会产生重复数据???
下面是A表中的数据

这是一道面试题,请大神指教!!!

Smile_Xu的主页 Smile_Xu | 初学一级 | 园豆:2
提问于:2018-10-03 11:02
< >
分享
最佳答案
0
insert into b (customername,amount)
select customername,amount
from a
where a.amount<500000
and not exists(select 1 from b where b.customername = a.customername and b.amount = a.amount)
收获园豆:10
RosonJ | 老鸟四级 |园豆:2315 | 2018-10-03 11:10
其他回答(1)
0

纯粹就事论事的解决方法就是楼上这样的,不考虑任何性能或者其他问题。
笔试的时候这样就行了。
面试的话,你可以多讲讲,比如可以这样解决,但是,这样解决会有什么问题,巴拉巴拉巴啦啦,
顺便就可以提到,使用自增ID的弊病所在,
就是这儿出现的,因为你不能Insert 原始的ID进入新表,所以要么在新表种增加一个字段用于记录老ID,
要么就得用这种又蠢又慢的判断语句来避免重复数据了。

爱编程的大叔 | 园豆:29784 (高人七级) | 2018-10-03 11:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册