如果行不存在,则进行SQL条件插入

14

我正在创建一个存储过程,该存储过程将使用类似于insert into + 子查询的语法向“staging”表中插入行:

INSERT INTO myStagingTable
SELECT col1, col2, col3
FROM myRealTable

我需要在那里添加一个条件判断,以确定例如col1的值是否已经存在于myStagingTable中,如果存在,则不插入它,只需跳过来自myRealTable的该行。

这种可能吗?如果是,我应该如何构造它?

谢谢您!

1个回答

16
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

在INTSERSECT子句的两侧,您不应该指定所选列吗?如果myRealTable中有四个列会怎样? - Philip Kelley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接