Como excluir de uma tabela onde o ID está em uma lista de IDs?

93

se eu tiver uma lista de IDs (1,4,6,7) e uma tabela db onde quero deletar todos os registros onde ID está nesta lista, qual é a maneira de fazer isso?

Leora
fonte

Respostas:

171

Sua pergunta quase soletra o SQL para isso:

DELETE FROM table WHERE id IN (1, 4, 6, 7)
Matti Virkkunen
fonte
@jayarjo: Qualquer diferença provavelmente seria insignificante, e não acho que haja qualquer razão para excluir um por um ser mais eficiente de qualquer maneira.
Matti Virkkunen
É exatamente onde o desempenho pode atingir a conveniência. Por exemplo, eu já tenho funções para fazer isso um por um no local. Mas se houvesse uma chance de aumento de desempenho, eu poderia escrever algum código adicional, caso contrário, provavelmente não valeria a pena.
Jayarjo
8
Um por um quase certamente seria mais lento, certamente no Oracle ou PostgreSQL. Dividir as operações SQL em muitas operações menores é uma ótima maneira de obter um desempenho ruim.
David Aldridge
1
Descobri que 10.000 itens na cláusula In levaram cerca de 200 segundos, mas 1000 levaram 3 segundos (ou 30 segundos na comparação normalizada). Tamanho importa.
ohmusama
12
delete from t
where id in (1, 4, 6, 7)
Carl Manaster
fonte