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''