Olá Flávio. Mas com esse exemplo você está supondo que na tabela exista o campo "id" que seria uma chave única, correto? O problema é que nessa tabela que mencionei não sei porque raios não existe essa chave única. Tem um campo id, auto incremento, que seria essa chave única, mas não sei como o sistema conseguiu inserir dois registros identicos, inclusive o valor do id... Então eu teria que ver se dá para identificar de outra maneira, pela posição física do registro, sei lá... Não sei se isso é possível... rs
-- *Edelson Regis de Lima* Em 16 de outubro de 2017 12:14, Flavio Henrique Araque Gurgel < [email protected]> escreveu: > > > Em seg, 16 de out de 2017 às 17:03, Edelson Regis de Lima < > [email protected]> 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; > > Note que não testei isto, então, pode ter erro de sintaxe ou mesmo de > semântica se não entendi bem seu problema. > Teste antes numa cópia do banco de dados ou da tabela, ou utilise uma > transação para que possa fazer rollback em caso de erro. > > []s > Flavio Gurgel > > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
