Re: Delete ou Update em dois registros identicos

Edelson Regis de Lima <[email protected]>
Newsgroups gmane.comp.db.postgresql.brasil
Message-ID <CAHy_SBfvm0njtxeJv7PNXQi-1t4d3YyfQzRd0akgJoY2-87wXQ__38663.8509146453$1508175163$gmane$org@mail.gmail.com>
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
> pgbr-geral-b/[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.