如果表C中的Col A和Col B的组合不存在,则在表3中插入新行

时间:2015-04-17 01:34:18

标签: mysql sql duplicates insert-into not-exists

我有一个代码从表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

我在这个网站上尝试了很多解决方案,但没有一个有效。我欢迎所有的建议。

谢谢, 马特

1 个答案:

答案 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忽略重复错误,插入其他行没有问题。