1

我正在尝试实现批量删除。我在网上找到了这段代码:

DECLARE @rowcount int = 1
WHILE (@rowcount != 0 ) BEGIN
    DELETE T1
    FROM (SELECT TOP (50) * FROM Orders WHERE OrderCity = @city) T1

    SELECT @rowcount = @@ROWCOUNT
END

这个想法是从@city删除所有订单

它似乎工作正常,但在我的现实中,我需要delete from Orders where OrderCity in (select ID from SomeOtherTable)

如果我尝试做同样的事情,它会起作用,但需要很长时间,因为 SomeOtherTable 将包含大约 150 万行,并且正在从主表中删除数据,所以它不会变得更小(它不包含城市,它的另一件事)。

我也不能加入两个表,因为它不会运行说不止一个表会受到影响。

所以基本上我的问题是:无论如何要从tableA中批量删除tableA.ID IN(从tableB中选择ID)

4

3 回答 3

1

是的,您无需加入即可:

DELETE tableA
FROM tableB 
WHERE tableA.ID = tableB.ID
于 2013-01-03T18:06:10.007 回答
0
Delete Order
FROM
Order INNER JOIN SomeOtherTable ON Order.OrderCity = SomeOtherTable.ID

这可以解决你的问题

于 2013-01-03T18:03:15.643 回答
0

您应该能够基于连接进行删除。尝试

DELETE FROM tableA
FROM tableA A
JOIN tableB B ON A.ID = B.ID

此外,如果 tableB 有大约一百万行,那么如果您在 ID 列上有一个索引,那将真的很有帮助。

于 2013-01-03T18:03:45.487 回答