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

Responder a