web-dev-qa-db-fra.com

Supprimer à l'aide d'une touche composite

J'essaie d'envelopper ma tête autour de créer une instruction DELETE pour une table avec une clé composite.

Je voudrais créer quelque chose comme:

DELETE 
FROM 
    table_example1
WHERE
    COLUMN1, COLUMN2
    IN
    (SELECT COLUMN1, COLUMN2 FROM table_example2
    WHERE
        COLUMN_DATETIME > @Period);

Garder à l'esprit que la combinaison de COLUMN1 et COLUMN2 est unique, chaque colonne seule n'est pas unique.

Je ne peux pas sembler avoir la tête autour de la façon dont je ferais cela.

6
Reaces

Devrait être quelque chose comme ça:

DELETE A
FROM 
    table_example1 AS A
    INNER JOIN table_example2 AS B
    ON A.COLUMN1 =B.COLUMN1
    AND A.COLUMN2 = B.COLUMN2
WHERE
    COLUMN_DATETIME > @Period;

Alternativement:

DELETE FROM A
FROM dbo.table_example1 AS A
WHERE EXISTS
(
    SELECT *
    FROM dbo.table_example2 AS B
    WHERE
        B.COLUMN1 = A.COLUMN1
        AND B.COLUMN2 = A.COLUMN2
        AND B.COLUMN_DATETIME > @Period
);
13
Sabin Bio