web-dev-qa-db-ja.com

複合キーを使用して削除する

複合キーを持つテーブルの削除ステートメントを作成することに頭を悩ませています。

私は次のようなものを作成したいと思います:

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

COLUMN1COLUMN2の組み合わせのみが一意であり、各列自体は一意ではないことに注意してください。

私は実際にこれを行う方法に頭を悩ませているようには思えません。

6
Reaces

このようなものでなければなりません:

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;

または:

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