2010-08-04 18 views
11

我有一个Microsoft SQL数据库,我试图插入一些数据。我在4列上有一个唯一的键,我想在检查数据时将多个表中的数据插入此表中,以确保它不会违反键的唯一性。如果我是在单列上做这个,我会做一个NOT IN,就像这样..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

编辑:

未经检验的,但大致会是这样:

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子句中使用WHERE NOT EXISTS?你能否提供语法?它将不胜感激。 – Kyle 2010-08-04 15:30:00

+0

工程就像一个魅力。 – Kyle 2010-08-04 17:22:45

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