如何插入 table 一个新行然后如果已经存在则什么都不做(没有 UNIQUE 键)

How to insert into table a new row then do nothing if already exists(without UNIQUE key)

假设我有这两个 table。我将来自 staging table.

的员工插入 employee table

分期table:

id employee_id name
1 12 Paul
2 13 Kyle

员工table

id employee_id name
5 4 Will
6 13 Kyle

现在,在员工 table 上,假设我想复制当前 table 上的内容,使用 INSERT SELECT INTO 语句,将插入 Paul,但我不不希望插入 Kyle,因为他已经在员工 table 上了(employee.employee_id 是定义列)。

我知道这可以通过在 employee_id 上设置一个唯一键或主键来完成,然后只使用语句 ON DUPLICATE KEY UPDATE 然后什么也不做,只需将它们设置回它们的原始值。

我是 SQL 的新手,我一直坚持设置 UNIQUE 键和 ON DUPLICATE KEY UPDATE 语句的解决方案,但我想知道该怎么做这没有我提到的那个解决方案?

首先,您应该记住,是否创建唯一键或主键的决定不取决于如何创建插入语句等。这是您的 table 应该做什么和不应该做什么的问题。 为了实现您的目标,您可以在插入语句中添加一个排除已存在条目的位置,例如:

INSERT INTO employees (id, employee_id, name) 
SELECT id, employee_id, name 
FROM staging 
WHERE employee_id NOT IN (SELECT employee_id FROM employees)

将问题分解成多个组成部分

  1. 获取暂存 table 但不在目标 table
  2. 中的员工列表
  3. 只插入那些记录

第 1 部分可以通过左连接和目标 table 为空的 Where 条件来实现。将其打包为 CTE,然后在 2)

中使用它