update una tabla subconsulta otra desde datos copiar con campo actualizar sql postgresql subquery sql-update

una - update con subconsulta sql server



ActualizaciĆ³n de filas de tablas en postgres usando subconsultas. (4)

Postgres permite:

UPDATE dummy SET customer=subquery.customer, address=subquery.address, partn=subquery.partn FROM (SELECT address_id, customer, address, partn FROM /* big hairy SQL */ ...) AS subquery WHERE dummy.address_id=subquery.address_id;

Esta sintaxis no es el estándar de SQL, pero es mucho más conveniente para este tipo de consulta que el estándar de SQL. Creo que Oracle (al menos) acepta algo similar.

Usando postgres 8.4, mi objetivo es actualizar la tabla 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 probé mi consulta usando la declaración de inserción:

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

Al ser Newbie, estoy fallando en convertir a la instrucción de actualización, es decir, actualizar las filas existentes con los valores devueltos por la instrucción de selección. Cualquier ayuda es muy apreciada.


Si no hay mejoras de rendimiento al usar una unión, entonces prefiero las expresiones de tabla comunes (CTE) para facilitar la lectura:

WITH subquery AS ( SELECT address_id, customer, address, partn FROM /* big hairy SQL */ ... ) UPDATE dummy SET customer=subquery.customer, address=subquery.address, partn=subquery.partn FROM subquery WHERE dummy.address_id=subquery.address_id;

En mi humilde opinión un poco más moderno.



update json_source_tabcol as d set isnullable = a.is_Nullable from information_schema.columns as a where a.table_name =d.table_name and a.table_schema = d.table_schema and a.column_name = d.column_name;