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



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;

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

2

Por favor, tente isto:

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

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

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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.