SQL-запрос не всегда вставляет пропущенные значения - PullRequest
1 голос
/ 11 июля 2019

Я пишу SQL-запрос для обновления таблицы из другой таблицы. Моя цель - чтобы мой запрос вставлял записи из table2 в table1, если эта запись не найдена в table1.

Запрос отлично работает, когда table1 полностью пуст, но когда я удаляю пару записей и пытаюсь выполнить свой запрос, он не может повторно вставить удаленные значения, даже если они все еще находятся в table2.

Вот мой код на Python с SQL-запросом

    cursor.execute('INSERT INTO table1 (col1, col2, col3, col4)  SELECT col1, col2, col3, col4 FROM table2 WHERE NOT EXISTS (SELECT col1, col2, col3, col4 FROM table1)')

Когда я удаляю запись в Access из table1 и пытаюсь повторно запустить скрипт, он ничего не делает, но когда я удаляю все из table1 и снова запускаю скрипт, он отлично работает.

1 Ответ

2 голосов
/ 11 июля 2019

Так работает NOT EXISTS, предполагая, что col1 является первичным ключом в таблицах

INSERT INTO table1 (col1, col2, col3, col4)  
SELECT col1, col2, col3, col4 
FROM table2  t2
WHERE NOT EXISTS (SELECT 1 FROM table1 t1 WHERE t1.col1 = t2.col1)
...