Em seg, 16 de out de 2017 às 17:14, Flavio Henrique Araque Gurgel < fha...@gmail.com> escreveu:
> Em seg, 16 de out de 2017 às 17:03, Edelson Regis de Lima < > edre...@gmail.com> escreveu: > >> Olá pessoal. >> >> To com um problema que não sei se tem solução... >> >> Tem um cliente que tem um banco de dados com uma tabela com dois >> registros identicos, e preciso dar um update ou um delete em um dos >> registros, porém como todos os campos são iguais, ainda não achei uma >> solução. >> >> Exmplo: tenho a minha_tabela, com as colunas col_a e col_b. Nessa tabela >> tem dois registros identicos: >> >> col_a | col_B >> >> aaa | bbb >> >> aaa | bbb >> >> Eu gostaria de apagar a linha dois por exemplo, ou dar um update mudando >> as informações para ccc | ddd. >> >> Já vi o uso do ROW_NUMBER () OVER (ORDER BY id), porém só achei exemplos >> que funcionasse com o SELECT. >> >> Já tentei: >> >> UPDATE minha_tabela SET col_a = 'ccc', col_b = 'ddd' where col_a = 'aaa' >> and col_b = 'bbb' and ROW_NUMBER () OVER (ORDER BY id) = 2; >> >> Porém dá: ERROR: cannot use window function in UPDATE >> >> Alguém teria uma solução? >> > Tente com uma CTE: > > WITH results_to_delete AS > ( SELECT max(id) AS id_to_delete, col_a, col_b FROM sua_tabela HAVING > count(id) > 1 GROUP BY 2, 3) > DELETE FROM sua_tabela USING results_to_delete WHERE id = id_to_delete; > Esqueci de dizer, você pode mudar a parte do DELETE para UPDATE se preferir, tente re-escrever com a lógica que deseja. []s Flavio Gurgel
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral