Как вставить строку в таблицу MySQL с проверкой на дубликаты? INSERT INTO / WHERE NOT EXISTS в MySQL
Всем привет, пытаюсь вставить в таблицу новую запись, с проверкой дубликата.
После исполнения запроса, у меня создается 42 000 записей....не могу понять почему.
Просьба подсказать верный синтаксис.
Использую следующий запрос:
INSERT INTO table_name (pid,num,korp,ext_id,ext_jk_id,ext_corpus_name,ext_corpus_id)
SELECT 3242,0,'8.2','78Н-8.2-XIII-5','7874','8.2','93110'
FROM flats WHERE NOT EXISTS (
SELECT * FROM table_name WHERE ext_id='78Н-8.2-XIII-5' AND ext_corpus_id='93110' AND ext_jk_id ='7874');
Как мне видится, логика запроса такая: Вставить в таблицу table_name в колонки (pid,num,korp,ext_id,ext_jk_id,ext_corpus_name,ext_corpus_id) данные 3242,0,'8.2','78Н-8.2-XIII-5','7874','8.2','93110' если нет совпадения в той же самой таблице table_name полю ext_id с таким же значением
Логика которую нужно реализовать простая: вставить в таблицу строчку с такими то данными, если в таблице нет строчки с полем, которое соответствует такому-то ИДшнику (поле ext_id, оно уникальное для всех строчек)
Ответы (1 шт):
Я конечно предполагаю важе желание добавить не достающие записи
INSERT INTO table_name (pid,num,korp,ext_id,ext_jk_id,ext_corpus_name,ext_corpus_id)
SELECT flats.pid, flats.num, flats.korp, flats.ext_id, flats.ext_jk_id, flats.ext_corpus_name, flats.ext_corpus_id
FROM flats
left join table_name on
table_name.ext_id = flats.ext_id and table_name.ext_corpus_id = flats.ext_corpus_id AND table_name.ext_jk_id = flats.ext_jk_id
where table_name.pid is null