如何插入到表的新行,然后什么都不做,如果已经存在(没有UNIQUE键)



假设我有这两个表。在这里,我从staging表中插入员工到employee表。

staging表:

<表类> id employee_id 名称 tbody> <<tr> 1 12 保罗 2 13 凯尔

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

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. 获取在staging表中但不在目标表中的员工列表
  2. 只插入这些记录

第1部分可以通过Left Join和Where条件来实现,即目标表为空。将其打包为CTE,然后在2)

中使用。

最新更新