No se puede lograr tomar los IDs devueltos por una instrucción INSERT e insertarlos en otra tabla.
Tengo estas 3 tablas
receta: recipe_id | name
ingrediente: ingredient_id | name
recetas_ingredientes: id | recipe_id | ingredient_id
El primer id de cada tabla es un SERIAL PRIMARY KEY y los dos nombres son character varying(50). Estoy tratando de insertar en la tercera tabla recipe_id y ingredient_id usando RETURNING, pero no funciona. Ya intenté los tres INSERT individualmente y funcionan perfectamente, el problema parece ocurrir cuando los pongo juntos usando WITH o no puede tomar los ids devueltos.
Aquí está mi SQL:
BEGIN; — iniciar transacción
WITH new_recipe AS (
INSERT INTO recipe (name) VALUES (‘{}’) RETURNING recipe_id
),
new_ingredient AS (
INSERT INTO ingredient (name) VALUES (‘{}’) RETURNING ingredient_id
)
INSERT INTO recetas_ingredientes (recipe_id, ingredient_id) VALUES (new_recipe.recipe_id, new_ingredient.ingredient_id)
COMMIT; — finalizar transacción
Este es el error que obtengo:
ERROR: error de sintaxis cerca de “WITH”
LINE 5: WITH new_ingredient AS (
^
SQL state: 42601
Character: 117
Ya revisé otras preguntas similares en stackoverflow y me parece que usé la misma pregunta exacta. Así que no entiendo dónde está el error.
davy.ai
Parece que el error en el código SQL se debe al uso de dos declaraciones
WITH
en una sola consulta de SQL, lo cual no está permitido. En este caso, puedes combinar las dos declaracionesWITH
en una sola, de la siguiente manera:Al usar una sola declaración
WITH
y luego una consultaSELECT
para hacer referencia a las dos cláusulasRETURNING
, puedes insertar los datos necesarios en la tablarecipes_ingredients
.¡Espero que esto ayude!