2010-08-04 20 views
11

Tengo una base de datos Microsoft SQL, donde intento insertar algunos datos. Tengo una clave única en 4 columnas y quiero insertar datos de varias tablas en esta tabla mientras verifico los datos para asegurarme de que no infrinjan la singularidad de la clave. Si estuviera haciendo esto en una sola columna, haría un NO EN, como así ..t-sql NOT IN con múltiples columnas

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 
     ) 

¿Alguna idea?

Respuesta

15

Use NOT EXISTS en su lugar, ya que tiene que ocuparse de varias columnas.

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

EDIT:

no probado, pero más o menos será la siguiente:

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 
    ) 

Para una de varias columnas comprobar que sería más o menos la siguiente:

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

¿Entonces SI NO EXISTE al principio, o DONDE NO EXISTE en la cláusula WHERE? ¿Podría posiblemente proporcionar sintaxis? Lo agradecería mucho. – Kyle

+0

Funciona como un encanto. – Kyle

0

También se puede usar la palabra clave 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 
Cuestiones relacionadas