2015-04-17 3 views
2

У меня есть код, который получает данные из таблиц 1 и 2, а затем вставляет новые строки в таблицу 3. Моя проблема в том, что код добавляет уже существующие записи. Как я могу предотвратить дублирование ошибок, если комбинация groupid и userid в таблице C уже существует?Вставить новую строку в таблицу 3, если комбинация Col A и Col B в таблице 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 

Вот таблица, прежде чем я побежал сценарий:

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 

Я пробовал много решений на этом сайте, но никто из них не работал. Я приветствую все советы.

Спасибо, Matt

ответ

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 игнорировать ошибки дублирования, вставляя другие строки без проблем.

+0

Thanks Gordon !!! Это сработало отлично !!!! – Matt