我正在尝试模拟完整的外部联接,将两个表相互比较。batch_import 表包含需要插入的记录,前提是它们不存在于employees 表中。为此,我尝试了以下查询:
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'
我猜这是我的 UNION ALL 的逻辑不正确。有人可以帮我找到解决方案吗?
编辑:: 我已经尝试过这个查询,它一直在表中添加记录,从最后一条记录开始。我也试过:
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;