如何通过一个查询删除多对多表中的许多行?

时间:2018-07-16 15:24:28

标签: sql-server tsql

如果我想在多对多表中插入许多行,可以使用这种方式:

INSERT INTO dbo.MyTable (IDTable1, IDTable2)
SELECT IDTable1, IDTable2
FROM (
VALUES
    (1,2),
    (1,3),
    (2,4),
    (4,5),
    (5,7)
) AS source(IDTable1, IDTable2)
WHERE NOT EXISTS(
    SELECT *
    FROM dbo.MyTable as TARGET
    WHERE target.IDTable1 = source.IDTable1
    AND target.IDTable2 = source.IDTable2
    );

现在我的问题是,是否有某种方法可以通过一个查询删除许多行。例如,如果我想删除(1,3),(4,5)和(5,7)。

我想这是相同的,只是用这种方式而不使用不存在的地方:

DELETE FROM dbo.MyTable (IDTable1, IDTable2)
    SELECT IDTable1, IDTable2
    FROM (
    VALUES
        (1,2),
        (1,3),
        (2,4),
        (4,5),
        (5,7)
    ) AS source(IDTable1, IDTable2)
    WHERE EXISTS(
        SELECT *
        FROM dbo.MyTable as TARGET
        WHERE target.IDTable1 = source.IDTable1
        AND target.IDTable2 = source.IDTable2
        );

我应该使用存在的位置。但是我想知道它是否正确。

1 个答案:

答案 0 :(得分:1)

您可以使用JOIN过滤删除:

delete target 
from Mytable target
inner join (
VALUES
    (1,3),
    (4,5),
    (5,7)
) AS source(IDTable1, IDTable2) on source.IDTable1 = target.IDTable1 and source.IDTable2 = target.IDTable2