none
Comando para deletar duplicidade RRS feed

  • Pergunta

  • Pessoal, tenho o seguinte sql:

    select nome, id from nomes

    Retorna a seguinte lista:
    PAULO,1
    PAULO,2
    JOÃO,3
    FERNANDO,4
    FERNANDO, 5

    Gostaria de em um delete, deletar o primeiro dos registros duplicados que aparecer e ficar somente com um, exemplo:
    PAULO,2
    JOÃO,3
    FERNANDO,5

    É possivel sem function ou procedure?
    quinta-feira, 21 de dezembro de 2017 14:43

Respostas

  • Neste caso faça assim:

    delete from nomes where id in (
    
    select min(id) as id from nomes group by nome having count(id)>1
    
    )



    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta Paulo.Sérgio quinta-feira, 21 de dezembro de 2017 17:05
    quinta-feira, 21 de dezembro de 2017 15:18

Todas as Respostas

  • Deste jeito:

    select nome, max(id) as id from nomes group by nome

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 21 de dezembro de 2017 15:04
  • William, obrigado pela ajuda, mas, no caso era deletar.

    Queria em uma comando só, identificar e excluir o que é duplicado, não apenas selecionar.. rs
    quinta-feira, 21 de dezembro de 2017 15:08
  • Imaginemos o seguinte cenário: Tabale TB_BOLETOS

    Você precisa ter algum tipo de campo para poder individualizar o registro, por exemplo, um ID numérico, ou o nome da pessoa, etc.. A query fica assim:

    DELETE A FROM TB_BOLETOS AS A,TB_BOLETOS AS B

    WHERE A.NOSSONUMERO = B.NOSSONUMERO

    AND A.ID > B.ID

    Nessa query estamos mantendo o registro mais antigo. A lógica é deletar um registro sempre que o campo nosso número for igual e o ID for maior.

    quinta-feira, 21 de dezembro de 2017 15:17
  • Neste caso faça assim:

    delete from nomes where id in (
    
    select min(id) as id from nomes group by nome having count(id)>1
    
    )



    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta Paulo.Sérgio quinta-feira, 21 de dezembro de 2017 17:05
    quinta-feira, 21 de dezembro de 2017 15:18