Как вставить строку в таблицу 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 шт):

Автор решения: Aziz Umarov

Я конечно предполагаю важе желание добавить не достающие записи

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
→ Ссылка