Come eliminare più righe in SQL dove id = (da x a y)


86

Sto cercando di eseguire una query SQL per eliminare le righe con ID da 163 a 265 in una tabella

Ho provato questo per eliminare meno numero di righe

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

Ma quando si tratta di eliminare centinaia di righe alla volta, c'è qualche query simile al metodo sopra, sto anche cercando di utilizzare questo tipo di query ma non sono riuscito a eseguirla

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

Per favore dimmi la query per eseguire l'azione sopra ...



Questo non è un duplicato del suddetto ... l'altro si riferisce alla cancellazione nel range di consecutivi, la domanda in questo si riferisce alla cancellazione di possibili ID non consecutivi, un elenco di ID ..
Merak Marey

Risposte:


190

Se devi eliminare in base a un elenco, puoi utilizzare IN:

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

Se devi eliminare in base al risultato di una query, puoi anche utilizzare IN:

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

(Si noti che la sottoquery deve restituire solo una colonna)

Se devi eliminare in base a un intervallo di valori, o usi BETWEENo usi disuguaglianze:

DELETE FROM your_table
WHERE id BETWEEN bottom_value AND top_value;

o

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

1
Grazie! Ho usato BETWEEN ed è stato eseguito con successo secondo le mie esigenze.
balu zapps

10
@baluzapps Se trovi utile questa risposta, accettala;)
Barranka

Una domanda relativa a questo: cosa succede se ho una chiave composita?
Mayur Beldar

1
@MayurBeldar: se hai una nuova domanda, pubblicala come domanda , non come commento
Barranka

21

Puoi usare BETWEEN :

DELETE FROM table
where id between 163 and 265

2

Per favore prova questo:

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

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

2
Potresti formattare il tuo codice evidenziandolo e premendo Ctrl + K
WhatsThePoint

4
Non credo sia la sintassi giusta per deleteun'affermazione
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

Ottieni cancellazione valore stringa

<RecordList>
    <ID>1</ID>
    <ID>2</ID>
</RecordList>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.