Como excluir várias linhas em SQL onde id = (x a y)

86

Estou tentando executar uma consulta SQL para excluir linhas com id's 163 a 265 em uma tabela

Eu tentei isso para excluir menos número de linhas

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

Mas quando se trata de deletar centenas de linhas por vez, há alguma consulta semelhante ao método acima? Também estou tentando usar esse tipo de consulta, mas não consegui executá-la

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

Diga-me a consulta para fazer a ação acima ...

Balu Zapps
fonte
Este não é uma duplicata do mencionado acima ... o outro está relacionado à exclusão no intervalo de consecutivos, a questão neste se refere à exclusão de possíveis ids não consecutivos, uma lista de ids ..
Merak Marey

Respostas:

186

Se precisar excluir com base em uma lista, você pode usar IN:

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

Se precisar excluir com base no resultado de uma consulta, você também pode usar IN:

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

(Observe que a subconsulta deve retornar apenas uma coluna)

Se você precisar excluir com base em uma faixa de valores, use BETWEENou use desigualdades:

DELETE FROM your_table
WHERE id BETWEEN bottom_value AND top_value;

ou

DELETE FROM your_table
WHERE id >= a_value AND id <= another_value;
Barranka
fonte
1
Obrigado! Eu usei BETWEEN e seu executado com sucesso para minha exigência.
balu zapps
10
@baluzapps Se você achar esta resposta útil, aceite;)
Barranka
Uma pergunta relacionada a isso: E se eu tiver uma chave composta?
Mayur Beldar
1
@MayurBeldar: se você tem uma nova pergunta, poste como uma pergunta , não como um comentário
Barranka
21

Você pode usar BETWEEN:

DELETE FROM table
where id between 163 and 265
leppie
fonte
2

Por favor, tente isto:

DELETE FROM `table` WHERE id >=163 and id<= 265
Keerthi
fonte
1
Delete Id from table where Id in (select id from table)
Denny
fonte
2
Você poderia formatar seu código destacando-o e pressionando Ctrl + K
WhatsThePoint
4
Não acho que seja a sintaxe certa para uma deletedeclaração
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

Apagar valor de string

<RecordList>
    <ID>1</ID>
    <ID>2</ID>
</RecordList>
ThienPhuc
fonte