根据表中的数据从表中批量删除

时间:2013-01-03 17:45:34

标签: sql sql-server tsql sql-server-2008-r2

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

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)

3 个答案:

答案 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列上有一个索引就会有所帮助。