嗨,我正在尝试将数据插入到另一个表中,我想跳过目标表中的重复记录。我已经使用以下mysql查询。
insert into adggtnz.`reg02_maininfo`(farmermobile,farmername,farmergender,origin)
select * from (SELECT mobile_no,name,sex,'EADD' FROM EADD.farmer)
as tmp where not exists (select farmermobile from adggeth.`reg02_maininfo` where farmermobile = tmp.mobile_no)
问题是当重复时查询无法完全运行,如何避免以下错误
16:09:03 insert into adggtnz.`reg02_maininfo`(farmermobile,farmername,farmergender,origin) select * from (SELECT mobile_no,name,sex,'EADD' FROM EADD.farmer) as tmp where not exists (select farmermobile from adggeth.`reg02_maininfo` where farmermobile = tmp.mobile_no) Error Code: 1062. Duplicate entry '0724961552' for key 'PRIMARY' 0.828 sec
请帮助我修改查询
答案 0 :(得分:1)
如果要避免重复输入,请先unique
约束,并使用INSERT IGNORE
或INSERT INTO ... ON DUPLICATE KEY UPDATE
。
第一种方法的问题是您可以(并且将)得到误报。
在您的特定情况下,修复非常容易。您需要在IGNORE
之后添加INSERT
。如果重复,将跳过该记录,然后继续进行下一个记录。
INSERT IGNORE INTO adggtnz.`reg02_maininfo`(farmermobile,farmername,farmergender,origin)
SELECT mobile_no, name, sex, 'EADD' FROM EADD.farmer
答案 1 :(得分:-1)
获取选择查询,该查询首先在reg02_maininfo中检查农民的手机号码,然后插入reg02_maininfo中。
insert into adggtnz.`reg02_maininfo`(farmermobile,farmername,farmergender,origin)
SELECT mobile_no,name,sex,'EADD' FROM EADD.farmer where mobile_no not in
(select farmermobile from adggeth.`reg02_maininfo`)