Usando o postgres 8.4, meu objetivo é atualizar a tabela existente:
CREATE TABLE public.dummy
(
address_id SERIAL,
addr1 character(40),
addr2 character(40),
city character(25),
state character(2),
zip character(5),
customer boolean,
supplier boolean,
partner boolean
)
WITH (
OIDS=FALSE
);
Inicialmente, testei minha consulta usando a instrução insert:
insert into address customer,supplier,partner
SELECT
case when cust.addr1 is not null then TRUE else FALSE end customer,
case when suppl.addr1 is not null then TRUE else FALSE end supplier,
case when partn.addr1 is not null then TRUE else FALSE end partner
from (
SELECT *
from address) pa
left outer join cust_original cust
on (pa.addr1=cust.addr1 and pa.addr2=cust.addr2 and pa.city=cust.city
and pa.state=cust.state and substring(cust.zip,1,5) = pa.zip )
left outer join supp_original suppl
on (pa.addr1=suppl.addr1 and pa.addr2=suppl.addr2 and pa.city=suppl.city
and pa.state=suppl.state and pa.zip = substring(suppl.zip,1,5))
left outer join partner_original partn
on (pa.addr1=partn.addr1 and pa.addr2=partn.addr2 and pa.city=partn.city
and pa.state=partn.state and pa.zip = substring(partn.zip,1,5) )
where pa.address_id = address_id
sendo novato, estou falhando em converter para atualizar a instrução, atualizando as linhas existentes com valores retornados pela instrução select. Qualquer ajuda é muito apreciada.
sql
postgresql
subquery
sql-update
empilhamento
fonte
fonte
Respostas:
O Postgres permite:
Essa sintaxe não é o SQL padrão, mas é muito mais conveniente para esse tipo de consulta do que o SQL padrão. Acredito que a Oracle (pelo menos) aceite algo semelhante.
fonte
ERROR: 42P01: relation "dummy" does not exist
dummy
deve ser substituído pelo nome da tabela que você está tentando atualizar. Por favor, entenda a pergunta e a resposta antes de tentar aplicar.Você está atrás da
UPDATE FROM
sintaxe.Referências
fonte
Se não houver ganhos de desempenho usando uma associação, prefiro CTEs (Common Table Expressions) para facilitar a leitura:
IMHO um pouco mais moderno.
fonte
Existem várias maneiras de atualizar as linhas.
Quando se trata de
UPDATE
linhas usando subconsultas, você pode usar qualquer uma dessas abordagens.Abordagem-4 [Usando a declaração WITH]
Espero que isso seja útil.
fonte
fonte
@ Mayur "4.2 [Usando a consulta com JOIN complexo]" com Common Table Expressions (CTEs) fez o truque para mim.
Espero que isso ajude ...: D
fonte