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

Insert New Row in Table 3 if combination of Col A and Col B in Table C Don't Exist

我有一个代码可以从 Tables 1 和 2 获取数据,然后将新行插入 Table3。我的问题是代码添加了已经存在的记录。当 groupiduserid 在 Table C 中的组合已经存在时,如何防止插入重复错误?

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

这是我 运行 脚本之前的 table:

id  groupid userid  timeadded
1   1       1       1372631339
2   4       2       1372689032
3   8       3       1373514395
4   3       4       1373514395

这是我 运行 脚本之后的 table。我在不想插入的重复行旁边放置了一个“*”。

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

我已经尝试过此站点上的许多解决方案,但 none 都奏效了。我欢迎所有建议。

谢谢, 马特

如果要避免重复,则添加唯一索引或约束:

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