utilizar update una tipos subconsultas subconsulta puede operaciĆ³n ejercicios delete anidadas sql postgresql sql-update

update - subconsultas sql



Actualizar o Insertar(varias filas y columnas) de la subconsulta en PostgreSQL (3)

Para la ACTUALIZACIÓN

Utilizar:

UPDATE table1 SET col1 = othertable.col2, col2 = othertable.col3 FROM othertable WHERE othertable.col1 = 123;

Para el INSERT

Utilizar:

INSERT INTO table1 (col1, col2) SELECT col1, col2 FROM othertable

No necesita la sintaxis VALUES si está usando SELECT para completar los valores de INSERT.

Estoy tratando de hacer algo como esto en postgres:

  • UPDATE table1 SET (col1, col2) = (SELECT col2, col3 FROM othertable WHERE othertable.col1 = 123);

  • INSERT INTO table1 (col1, col2) VALUES (SELECT col1, col2 FROM othertable)

Pero el punto 1 no es posible incluso con postgres 9.0 como se menciona en los documentos ( http://www.postgresql.org/docs/9.0/static/sql-update.html )

También el punto 2 parece no funcionar. recibo el siguiente error: la subconsulta debe devolver solo una columna.

Espero que alguien tenga una solución para mí. de lo contrario, las consultas tomarán un poco de tiempo :(.

FYI: Estoy tratando de seleccionar diferentes columnas de varias tablas y almacenarlas en una tabla temporal, para que otra aplicación pueda obtener fácilmente los datos preparados.


La respuesta de OMG Ponies funciona perfectamente, pero por si necesita algo más complejo, aquí hay un ejemplo de una consulta de actualización un poco más avanzada:

UPDATE table1 SET col1 = subquery.col2, col2 = subquery.col3 FROM ( SELECT t2.foo as col1, t3.bar as col2, t3.foobar as col3 FROM table2 t2 INNER JOIN table3 t3 ON t2.id = t3.t2_id WHERE t2.created_at > ''2016-01-01'' ) AS subquery WHERE table1.id = subquery.col1;


UPDATE table1 SET (col1, col2) = (col2, col3) FROM othertable WHERE othertable.col1 = 123;