mysql - 尝试将值从一个表插入到另一个未找到代理键匹配的表

标签 mysql left-join bulkinsert right-join

我正在尝试模拟完整的外部联接,将两个表相互比较。 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/

相关文章:

php - 登录代码点火器代码不起作用

php - Left Join 在 CMD 提示下工作,而不是 PHP

c# - 来自列表的 SqlBulkCopy<>

c# - 如何使用 Dapper 批量插入外键?

mysql - 批量插入SQL语句

php - 存储用户名和密码然后用户想要检索用户信息但密码已加密

mysql - 关于pair-remove重复的Sql查询

java - Play 框架 - 保存模型时出现 Mysql 错误

php - 如何删除 LEFT OUTER JOIN

MYSQL 比较 LEFT JOIN 中的多个值