2013-04-16 3 views
45

Sto cercando di eseguire una query SQL per eliminare le righe con id di 163-265 in una tabellaCome eliminare più righe in SQL dove id = (x per y)

ho provato questo per cancellare meno il numero di righe

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

ma quando si tratta di eliminare 100 di righe alla volta, c'è qualche richiesta simile al metodo di cui sopra sto anche cercando di utilizzare questo tipo di query, ma riuscito a eseguirlo

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

prego mi dice la query per fare l'azione di cui sopra ...

+1

impressionante ha funzionato grazie! –

+0

Aggiunto come risposta in questo caso :) – leppie

+1

Possibile duplicato di [Elimina record SQL in un intervallo specifico] (http://stackoverflow.com/questions/8225036/sql-delete-records-within-a-specific-range) –

risposta

11

È possibile utilizzare BETWEEN:

DELETE FROM table 
where id between 163 and 265 
96

Se è necessario eliminare sulla base di un elenco, è possibile utilizzare IN:

delete from your_table 
where id in (value1, value2, ...); 

Se è necessario eliminare in base al risultato di una query, è anche possibile utilizzare IN:

delete from your_table 
where id in (select aColumn from ...); 

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

Se è necessario eliminare in base a un intervallo di valori, o si usa BETWEEN o se si utilizza le 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; 
+0

Grazie! Ho usato BETWEEN e la sua esecuzione con successo al mio requisito. –

+4

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

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

valore stringa Get cancellare

<RecordList> 
    <ID>1</ID> 
    <ID>2</ID> 
</RecordList> 
+0

Questo non risponde alla domanda –

2

Si prega di provare questo:

DELETE FROM `table` WHERE id >=163 and id<= 265 
0
Delete Id from table where Id in (select id from table) 
+2

Puoi formattare il tuo codice evidenziandolo e premendo Ctrl + K – WhatsThePoint

+1

Non penso che sia la sintassi giusta per un 'delete 'dichiarazione – ExDev