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.ID IN(tableBからIDを選択)でtableAからバッチ削除する方法はありますか?

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に約100万行ある場合、ID列にインデックスがあると非常に役立ちます。

于 2013-01-03T18:03:45.487 に答える