tablas postgres libros introduccion español ejemplos consultar consulta conclusiones sql postgresql insert subquery

libros - PostgreSQL: Sub-seleccionar dentro de inserción



postgresql introduccion (2)

Utilice la variante INSERT INTO SELECT , incluidas las constantes correctas en la instrucción SELECT .

La sintaxis de PostgreSQL INSERT es:

INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query } [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]

Tome nota de la opción de consulta al final de la segunda línea de arriba.

Aquí hay un ejemplo para ti.

INSERT INTO widgets ( map_id, widget_name ) SELECT mt.map_id, ''Bupo'' FROM map_tags mt WHERE mt.map_license = ''12345''

Tengo una tabla llamada map_tags :

map_id | map_license | map_desc

Y otra tabla ( widgets ) cuyos registros contienen una referencia de clave externa (1 a 1) a un registro map_tags :

widget_id | map_id | widget_name

Dada la restricción de que todos los map_license son únicos (sin embargo, no están configurados como claves en map_tags ), entonces si tengo un map_license y un widget_name , me gustaría realizar una inserción en los widgets dentro de la misma declaración SQL:

INSERT INTO widgets w ( map_id, widget_name ) VALUES ( ( SELECT mt.map_id FROM map_tags mt WHERE // This should work and return a single record because map_license is unique mt.map_license = ''12345'' ), ''Bupo'' )

Creo que estoy en el camino correcto, pero sé de entrada que este es un SQL incorrecto para Postgres. ¿Alguien sabe la forma correcta de lograr una consulta única?


INSERT INTO widgets ( map_id, widget_name ) SELECT mt.map_id, ''Bupo'' FROM map_tags mt WHERE mt.map_license = ''12345''