我正在尝试实施批量删除。 我在网上找到了这段代码:
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)
答案 0 :(得分:1)
是的,你可以在没有加入的情况下做到:
DELETE tableA
FROM tableB
WHERE tableA.ID = tableB.ID
答案 1 :(得分:0)
Delete Order
FROM
Order INNER JOIN SomeOtherTable ON Order.OrderCity = SomeOtherTable.ID
这可以解决您的问题
答案 2 :(得分:0)
您应该可以根据联接进行删除。尝试
DELETE FROM tableA
FROM tableA A
JOIN tableB B ON A.ID = B.ID
另外,如果tableB有大约一百万行,那么如果你在ID列上有一个索引就会有所帮助。