t-sql NOT IN с несколькими столбцами - PullRequest
11 голосов
/ 04 августа 2010

У меня есть база данных Microsoft SQL, куда я пытаюсь вставить некоторые данные.У меня есть уникальный ключ на 4 столбца, и я хочу вставить данные из нескольких таблиц в эту таблицу, проверяя данные, чтобы убедиться, что они не нарушат уникальность ключа.Если бы я делал это в одном столбце, я бы сделал НЕ ВХОД, как это ..

INSERT TABLE_A (FLD_1)
    SELECT FLD_1
        FROM TBL_B
        INNER JOIN TBL_C
            ON TBL_B.FLD_1 = TBL_C.FLD_1
    WHERE TBL_B.FLD_1 NOT IN
        (
        SELECT TBL_A.FLD_1 FROM TBL_A
        )

Есть мысли?

Ответы [ 2 ]

15 голосов
/ 04 августа 2010

Вместо этого используйте NOT EXISTS, так как вам приходится иметь дело с несколькими столбцами.

http://www.techonthenet.com/sql/exists.php

РЕДАКТИРОВАТЬ:

Не проверено, но примерно это будет так:

SELECT FLD_1
FROM TBL_B
INNER JOIN TBL_C  ON TBL_B.FLD_1 = TBL_C.FLD_1
WHERE NOT EXISTS 
    (
    SELECT TBL_A.FLD_1 FROM TBL_A INNER JOIN TBL_B ON TBL_B.FLD1 = TBL_A.FLD1
    )

Для проверки нескольких столбцов это будетпримерно так:

SELECT FLD_1, FLD_2, FLD_3, FLD_4)
FROM TBL_B
INNER JOIN TBL_C  ON TBL_B.FLD_1 = TBL_C.FLD_1
WHERE NOT EXISTS 
    (
    SELECT TBL_A.FLD_1, TBL_A.FLD_2, TBL_A.FLD_3, TBL_A.FLD_4 
    FROM TBL_A 
    INNER JOIN TBL_B ON TBL_B.FLD1 = TBL_A.FLD1 AND 
                        TBL_B.FLD2 = TBL_A.FLD2 AND 
                        TBL_B.FLD3 = TBL_A.FLD3 AND 
                        TBL_B.FLD4 = TBL_A.FLD4 
    )
0 голосов
/ 20 декабря 2015

Также может использоваться ключевое слово EXCEPT.

SELECT FLD_1, FLD_2, FLD_3, FLD_4)
FROM TBL_B
INNER JOIN TBL_C  ON TBL_B.FLD_1 = TBL_C.FLD_1

EXCEPT

SELECT TBL_A.FLD_1, TBL_A.FLD_2, TBL_A.FLD_3, TBL_A.FLD_4 
FROM TBL_A 
INNER JOIN TBL_B ON TBL_B.FLD1 = TBL_A.FLD1 AND 
                    TBL_B.FLD2 = TBL_A.FLD2 AND 
                    TBL_B.FLD3 = TBL_A.FLD3 AND 
                    TBL_B.FLD4 = TBL_A.FLD4 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...