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

Responder a