我正在尝试模拟完整的外部联接,将两个表相互比较。 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 收到消息: ERROR 1137 (HY000): Can't reopen table: '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 员工(名字、姓氏、雇主 ID、出生日期、custom_corpore_headOffice、contractId)
SELECT 名字、batch_import.surname、员工编号、出生日期、商店、batch_import.contractId
从批处理导入
LEFT JOIN 员工 ON 员工.employersId = NULL;
最佳答案
选项 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
关于mysql - 尝试将值从一个表插入到另一个未找到代理键匹配的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27817395/