2010-08-04 2 views
11

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

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 
     ) 

Любые мысли?

ответ

15

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

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

EDIT:

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

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

Так что используйте IF NOT EXISTS в начале или НЕ СУЩЕСТВУЕТ в предложении WHERE? Не могли бы вы предоставить синтаксис? Это было бы очень признательно. – Kyle

+0

Работает как шарм. – Kyle

0

Также может использоваться ключевое слово 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 
Смежные вопросы