SQL условная вставка, если строка еще не существует - PullRequest
14 голосов
/ 18 февраля 2010

Я создаю sproc, который будет вставлять строки в промежуточную таблицу со вставкой в ​​подзапрос + следующим образом:

INSERT INTO myStagingTable
SELECT col1, col2, col3
FROM myRealTable

Мне нужно как-то вставить условное выражение, чтобы определить, существует ли, например, значение из col1, например, в myStagingTable, не вставляйте его, просто пропустите эту строку из myRealTable.

это возможно? Если да, то как бы я это структурировал?

ТИА

1 Ответ

16 голосов
/ 18 февраля 2010
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
...