Puxa Osvaldo, mais uma vez obrigado, funcionou...
Estou tentando entender o Postgres ainda :)
Vim do mysql e algumas coisa são bem diferentes

Valeu....

-----Mensagem Original----- 
From: Osvaldo Kussama
Sent: Wednesday, January 18, 2012 1:43 PM
To: Comunidade PostgreSQL Brasileira
Subject: Re: [pgbr-geral]Por que este UPDATE está loopando?

2012/1/18, Marcelo Silva (IG) <marc...@ig.com.br>:
> Pessoal esse UPDATE esta sem fim... mas não entendi porque o mesmo SQL
> funciona normalmente
>
> Olha o UPDATE
>
> update mv_vendas_itens set cod_key_pre = coalesce(b.cod_key, 0)
> from mv_vendas_itens as a
> inner join mv_vendas_pre_itens b on(b.cod_id = a.cod_id)
> and(b.pedido = a.pedido)
> and(b.codigo = a.codigo)
> and(b.valor_ven = a.valor_ven)
> and(b.obs not in('C'))
> where (a.obs not in('C'))
>
> Aqui o SELECT
>
> select b.cod_key, b.pedido, b.codigo, b.valor_ven, a.* from 
> mv_vendas_itens
> a
> inner join mv_vendas_pre_itens b on(b.cod_id = a.cod_id)
> and(b.pedido = a.pedido)
> and(b.codigo = a.codigo)
> and(b.valor_ven = a.valor_ven)
> and(b.obs not in('C'))
> where (a.obs not in('C'))
>
> O Select vem rapidinho, mas o Update fica em loop
>


Veja a definição do comando update:
http://www.postgresql.org/docs/current/interactive/sql-update.html

Creio que deva ser:

UPDATE mv_vendas_itens a SET cod_key_pre = coalesce(b.cod_key, 0)
FROM mv_vendas_pre_itens b
WHERE (b.cod_id = a.cod_id)
AND (b.pedido = a.pedido)
AND (b.codigo = a.codigo)
AND (b.valor_ven = a.valor_ven)
AND (b.obs not in('C'))
AND (a.obs not in('C'));

Osvaldo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral 

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a