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 ...

Balu Zapps
quelle
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;
Barranka
quelle
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
Leppie
quelle
2

Bitte versuchen Sie dies:

DELETE FROM `table` WHERE id >=163 and id<= 265
Keerthi
quelle
1
Delete Id from table where Id in (select id from table)
Denny
quelle
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>
ThienPhuc
quelle