我正在创建一个存储过程,该存储过程将使用类似于insert into + 子查询的语法向“staging”表中插入行:
INSERT INTO myStagingTable
SELECT col1, col2, col3
FROM myRealTable
我需要在那里添加一个条件判断,以确定例如col1的值是否已经存在于myStagingTable中,如果存在,则不插入它,只需跳过来自myRealTable的该行。
这种可能吗?如果是,我应该如何构造它?
谢谢您!
我正在创建一个存储过程,该存储过程将使用类似于insert into + 子查询的语法向“staging”表中插入行:
INSERT INTO myStagingTable
SELECT col1, col2, col3
FROM myRealTable
我需要在那里添加一个条件判断,以确定例如col1的值是否已经存在于myStagingTable中,如果存在,则不插入它,只需跳过来自myRealTable的该行。
这种可能吗?如果是,我应该如何构造它?
谢谢您!
INSERT
INTO myStagingTable
SELECT col1, col2, col3
FROM myRealTable rt
WHERE NOT EXISTS
(
SELECT rt.col1, rt.col2, rt.col3
INTERSECT
SELECT col1, col2, col3
FROM myStagingTable
)
这将处理所有重复项(包括 NULL
)。
请注意,如果实际表中有任何重复项,则会插入重复项。例如,如果真实表包含
1 1 1
1 1 1
并且暂存表包含
2 2 2
如果您希望在插入时消除重复记录(这样只会插入一个 1, 1, 1
实例),那么只需使用以下代码:
如果两个记录都带有 1, 1, 1
,它们都将被插入。
INSERT
INTO myStagingTable
SELECT col1, col2, col3
FROM myRealTable
EXCEPT
SELECT col1, col2, col3
FROM myStagingTable