如果我想在多对多表中插入许多行,可以使用这种方式:
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
);
我应该使用存在的位置。但是我想知道它是否正确。
答案 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