windfall Postado Setembro 29, 2011 Denunciar Share Postado Setembro 29, 2011 Bom dia, estou com uma dúvida. Não consigo criar uma query que exclua todos os registros de uma tabela, EXCETO os últimos 20.Alguém teria idéia de como resolver isto?Att. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 tércio fernandes Postado Setembro 29, 2011 Denunciar Share Postado Setembro 29, 2011 sempre sobra 20?tenta DELETE from nome_da_tabela; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 windfall Postado Setembro 29, 2011 Autor Denunciar Share Postado Setembro 29, 2011 Olá Tércio, sim, sempre sobrará 20.O que você sugeriu vai excluir tudo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 CAIO.EXE Postado Setembro 30, 2011 Denunciar Share Postado Setembro 30, 2011 cara faz o seguinte,se sua tabela tiver um campo ID auto incrementadicione a condição:WHERE ID < (select max(id) - 20 from tabela_que_vai_deletar)agora,se você não tiver este campo incremental, deverá primeiro criar uma querie que retorne a linha 20 em ordem descrescente e jogar em uma variavelselect IDfrom tabelaorder by 1 desclimit 20,1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 tércio fernandes Postado Setembro 30, 2011 Denunciar Share Postado Setembro 30, 2011 windfallme desculpe eu entendi completamente errado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Outubro 4, 2011 Denunciar Share Postado Outubro 4, 2011 cara faz o seguinte,se sua tabela tiver um campo ID auto incrementadicione a condição:WHERE ID < (select max(id) - 20 from tabela_que_vai_deletar) agora, se você não tiver este campo incremental, deverá primeiro criar uma querie que retorne a linha 20 em ordem descrescente e jogar em uma variavel select ID from tabela order by 1 desc limit 20,1 A primeira resposta WHERE ID < (select max(id) - 20 from tabela_que_vai_deletar) Não funciona. pois se o ID já sofreu exclusão a numeração estará com saltos e o resultado da subtração falhará. A segunda resposta só funcionará se o select para achar os vinte últimos, for executado independentemente da ação de exclusão. Ou seja se você colocar o select como parte da cláusula where do delete, então haverá erro. Exemplo: DELETE FROM tabela_que_vai_deletar WHERE ID = (select ID from tabela order by 1 desc limit 20,1) Haverá erro. O Correto será: SET @VARIAVEL = (select ID from tabela order by 1 desc limit 20,1); DELETE FROM tabela_que_vai_deletar WHERE ID < @VARIAVEL; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Aurélio Moreira Postado Outubro 6, 2011 Denunciar Share Postado Outubro 6, 2011 Uma opção seria essaset @limit = (select count(*) from tabela_que_vai_excluir )-20; delete from tabela_que_vai_excluir order by id asc limit 0,@limit acho que isso vai resolver, mas so explicando: em set @limit = (select count(*) from tabela_que_vai_excluir )-20; estou pegando o numero total de registo e reduzindo os 20 que você quer manter. e aqui delete from tabela_que_vai_excluir order by id asc limit 0,@limitesta deletando em ordem acendente (asc) todos os registros dentro do limite que você deseja, assim ele vai preservar os ultimos 20 registros. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
windfall
Bom dia,
estou com uma dúvida. Não consigo criar uma query que exclua todos os registros de uma tabela, EXCETO os últimos 20.
Alguém teria idéia de como resolver isto?
Att.
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.