So löschen Sie mehrere Zeilen in SQL, wobei id = (x bis y)


84

Ich versuche, eine SQL-Abfrage auszuführen, um Zeilen mit den IDs 163 bis 265 in einer Tabelle zu löschen

Ich habe versucht, weniger Zeilen zu löschen

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

Aber wenn es darum geht, Hunderte von Zeilen gleichzeitig zu löschen, gibt es eine Abfrage ähnlich der obigen Methode? Ich versuche auch, diese Art von Abfrage zu verwenden, konnte sie jedoch nicht ausführen

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

Bitte teilen Sie mir die Abfrage mit, um die obige Aktion auszuführen ...


1
Mögliches Duplikat von SQL-

Dies ist keine Kopie der oben genannten ... die andere bezieht sich auf das Löschen in einer Reihe von aufeinanderfolgenden IDs, die Frage in diesem bezieht sich auf das Löschen möglicher nicht aufeinanderfolgender IDs, eine Liste von IDs.
Merak Marey

Antworten:


184

Wenn Sie basierend auf einer Liste löschen müssen, können Sie Folgendes verwenden IN:

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

Wenn Sie basierend auf dem Ergebnis einer Abfrage löschen müssen, können Sie auch Folgendes verwenden IN:

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

(Beachten Sie, dass die Unterabfrage nur eine Spalte zurückgeben darf.)

Wenn Sie basierend auf einem Wertebereich löschen müssen, verwenden BETWEENSie entweder oder Sie verwenden Ungleichungen:

DELETE FROM your_table
WHERE id BETWEEN bottom_value AND top_value;

oder

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

1
Vielen Dank! Ich habe ZWISCHEN verwendet und es wurde erfolgreich ausgeführt, um meine Anforderung zu erfüllen.
Balu Zapps

10
@baluzapps Wenn Sie diese Antwort nützlich finden, akzeptieren Sie sie;)
Barranka

Eine Frage dazu: Was ist, wenn ich einen zusammengesetzten Schlüssel habe?
Mayur Beldar

1
@ MayurBeldar: Wenn Sie eine neue Frage haben, posten Sie sie als Frage , nicht als Kommentar
Barranka

21

Sie können verwenden BETWEEN:

DELETE FROM table
where id between 163 and 265

2

Bitte versuchen Sie dies:

DELETE FROM `table` WHERE id >=163 and id<= 265

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

2
Könnten Sie bitte Ihren Code formatieren, indem Sie ihn markieren und Strg + K
WhatsThePoint

4
Ich denke nicht, dass es die richtige Syntax für eine deleteAussage ist
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

String-Wert löschen lassen

<RecordList>
    <ID>1</ID>
    <ID>2</ID>
</RecordList>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.