id =(x to y)であるSQLの複数の行を削除する方法


86

SQLクエリを実行して、テーブル内のIDが163〜265の行を削除しようとしています。

削除する行数を減らすためにこれを試しました

    DELETE FROM `table` WHERE id IN (264, 265)

しかし、一度に数百行を削除する場合、上記の方法に似たクエリはありますか?私もこの種のクエリを使用しようとしていますが、実行できませんでした

    DELETE FROM `table` WHERE id IN (SELECT * FROM table WHERE id = )

上記のアクションを実行するためのクエリを教えてください...



これは、上述から複製されていません...他はconsecutivesの範囲内の削除に関し、これで問題は、可能な非連続的なIDの.. IDのリストの削除を参照
メラクMarey

回答:


190

リストに基づいて削除する必要がある場合は、次を使用できますIN

DELETE FROM your_table
WHERE id IN (value1, value2, ...);

クエリの結果に基づいて削除する必要がある場合は、次を使用することもできますIN

DELETE FROM your_table
WHERE id IN (select aColumn from ...);

(サブクエリは1つの列のみを返す必要があることに注意してください)

値の範囲に基づいて削除する必要がある場合は、使用するBETWEENか、不等式を使用します。

DELETE FROM your_table
WHERE id BETWEEN bottom_value AND top_value;

または

DELETE FROM your_table
WHERE id >= a_value AND id <= another_value;

1
ありがとうございました!私はBETWEENを使用し、その要件に従って正常に実行されました。
balu zapps 2013

10
@baluzappsこの回答が役に立った場合は、受け入れてください;)
Barranka 2014

これに関連する質問:複合キーがある場合はどうなりますか?
Mayur Beldar 2018年

1
@MayurBeldar:新しい質問がある場合は、コメントではなく質問として投稿してください
Barranka 2018年

21

あなたが使用することができますBETWEEN

DELETE FROM table
where id between 163 and 265


1
Delete Id from table where Id in (select id from table)

2
コードを強調表示してCtrl + Kを押してフォーマットしてください
WhatsThePoint 2017年

4
私はそれがdeleteステートメントの正しい構文だとは思いません
Fabrizio

-6
CREATE PROC [dbo].[sp_DELETE_MULTI_ROW]       
@CODE XML
,@ERRFLAG  CHAR(1) = '0' OUTPUT    

AS        

SET NOCOUNT ON  
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  

DELETE tb_SampleTest
    WHERE 
        CODE IN(
            SELECT Item.value('.', 'VARCHAR(20)')
            FROM  @CODE.nodes('RecordList/ID') AS x(Item)
            )

IF @@ROWCOUNT = 0
    SET @ERRFLAG = 200

SET NOCOUNT OFF

文字列値の削除を取得

<RecordList>
    <ID>1</ID>
    <ID>2</ID>
</RecordList>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.