我有一个代码从表1和表2中获取数据,然后在表3中插入新行。我的问题是代码添加了已存在的记录。如果表C中的 groupid 和 userid 的组合已经存在,我该如何防止插入重复错误?
INSERT INTO mdl_groups_members (groupid,userid)
SELECT l.mgroup AS moodle, r.id AS mdl_user
FROM moodle AS l
JOIN mdl_user AS r
ON l.orders_id = r.id
WHERE l.mgroup > 0
这是我运行脚本之前的表格:
id groupid userid timeadded
1 1 1 1372631339
2 4 2 1372689032
3 8 3 1373514395
4 3 4 1373514395
这是我运行脚本后的表格。我放了一个" *"在我不想插入的重复行旁边。
id groupid userid timeadded
1 1 1 1372631339
2 4 2 1372689032
3 8 3 1373514395
4 3 4 1373514395
*5 1 1 1372631339
*6 4 2 1372689032
*7 8 3 1373514395
*8 3 4 1373514395
9 2 6 1373514398
我在这个网站上尝试了很多解决方案,但没有一个有效。我欢迎所有的建议。
谢谢, 马特
答案 0 :(得分:2)
如果要避免重复,请添加唯一索引或约束:
create unique index idx_mdl_groups_members_2 on mdl_groups_members(groupid, userid)
然后使用on duplicate key update
:
INSERT INTO mdl_groups_members (groupid, userid)
SELECT l.mgroup AS moodle, r.id AS mdl_user
FROM moodle l JOIN
mdl_user r
ON l.orders_id = r.id
WHERE l.mgroup > 0
ON DUPLICATE KEY UPDATE groupid = VALUES(groupid);
on duplicate key update
导致insert
忽略重复错误,插入其他行没有问题。