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;

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
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a