Попытка вставить значения из одной таблицы в другую, где совпадение суррогатного ключа не найдено
Я пытаюсь смоделировать полное внешнее объединение, сравнивая две таблицы друг с другом. Таблица batch_import содержит записи, которые необходимо вставить, только если их нет в таблице сотрудников. Для этого я попробовал следующий запрос:
INSERT INTO employees (forename, surname, employersId, custom_corpore_headOffice, contractId)
SELECT firstname, surname, employeenumber, dob, store, contractId
FROM batch_import
LEFT JOIN employees ON batch_import.employeenumber = employees.employersId AND batch_import.contractId = employees.contractId
UNION ALL
SELECT forename, surname, employersId, custom_corpore_headOffice, contractId
FROM batch_import RIGHT JOIN employees ON batch_import.employeenumber = employees.employersId AND batch_import.contractId = employees.contractId
WHERE batch_import.employeenumber IS NULL AND batch_import.contractId IS NULL
";
однако, когда я запускаю этот запрос, я получаю сообщение от mysql: ОШИБКА 1137 (HY000): Не могу открыть таблицу: 'batch_import'
Я предполагаю, что логика моего СОЮЗА ВСЕ неверна. Может ли кто-нибудь помочь мне найти решение?
РЕДАКТИРОВАТЬ:: Я пробовал этот запрос, и он продолжает добавлять записи в таблицу, начиная с последней записи. Я также попробовал:
INSERT INTO employees (forename, surname, employersId, dateOfBirth, custom_corpore_headOffice, contractId)
SELECT firstname, batch_import.surname, employeenumber, dob, store, batch_import.contractId
FROM batch_import
LEFT JOIN employees ON batch_import.employeenumber = employees.employersId AND batch_import.contractId = employees.contractId
UNION
SELECT firstname, batch_import.surname, employeenumber, dob, store, batch_import.contractId
FROM batch_import RIGHT JOIN employees ON batch_import.employeenumber = employees.employersId AND batch_import.contractId = employees.contractId;
но все равно безрезультатно. Вместо того, чтобы игнорировать то, что существует, он просто записывает все в конец таблицы.
Также попробовал: INSERT INTO employees (forename, surname, employersId, dateOfBirth, custom_corpore_headOffice, contractId)
SELECT firstname, batch_import.surname, employeenumber, dob, store, batch_import.contractId
FROM batch_import
LEFT JOIN employees ON employees.employersId = NULL;
1 ответ
ОПЦИЯ 1
INSERT INTO employees (forename, surname, employersId, custom_corpore_headOffice, contractId)
SELECT firstname, surname, employeenumber, dob, store, contractId
FROM batch_import
WHERE NOT EXISTS (Select 1 From employees where batch_import.employeenumber = employees.employersId AND batch_import.contractId = employees.contractId)
ВАРИАНТ 2
INSERT INTO employees (forename, surname, employersId, custom_corpore_headOffice, contractId)
SELECT firstname, surname, employeenumber, dob, store, contractId
FROM batch_import
LEFT JOIN employees ON batch_import.employeenumber = employees.employersId AND batch_import.contractId = employees.contractId
WHERE employees.employersId is NULL