SQL INSERT/SELECT 使用 WITH 子句
SQL INSERT/SELECT using WITH clause
我正在尝试根据 ID 列表从两个 table 制作副本,这些 ID 是从初始 table 中检索的,然后这些 ID 用于 INSERT SELECT 语句,也必须将前一个 INSERT 创建的 ID 插入到第三个 table:
BEGIN;
WITH dog_tmp AS (SELECT id FROM dog WHERE toy_id = '12345'),
meal_tmp as (INSERT INTO meal (id, dog_id, date_created, type)
SELECT public.uuid_generate_v4(), dt.id, m.date_created, m.type
FROM meal AS m
JOIN dog_tmp dt ON dt.id = m.dog_id RETURNING m.id AS meal_uuid)
INSERT INTO dog_diet (id, meal_id, date_created)
SELECT public.uuid_generate_v4(), mt.meal_uuid, dd.date_created
FROM meal_tmp mt
JOIN dog_diet dd ON dd.thread_id = mt.meal_uuid;
COMMIT;
我收到此错误:[42P01] 错误:table“m”[=26= 缺少 FROM 子句条目]
在此先感谢您对此的提示,或者如果可能的话另一种方法。
快速回答:将 RETURNING m.id AS meal_uuid
更改为 RETURNING id AS meal_uuid
(db fiddle)。
所以有争议的完整声明是:
INSERT INTO meal (id, dog_id, date_created, type)
SELECT public.uuid_generate_v4(), dt.id, m.date_created, m.type
FROM meal AS m
JOIN dog_tmp dt ON dt.id = m.dog_id
RETURNING m.id AS meal_uuid
在 select 中,您将 m
设置为 meal
的别名,但其范围是 SELECT
查询(因此 m
不是在外部 insert
语句中定义)。
我正在尝试根据 ID 列表从两个 table 制作副本,这些 ID 是从初始 table 中检索的,然后这些 ID 用于 INSERT SELECT 语句,也必须将前一个 INSERT 创建的 ID 插入到第三个 table:
BEGIN;
WITH dog_tmp AS (SELECT id FROM dog WHERE toy_id = '12345'),
meal_tmp as (INSERT INTO meal (id, dog_id, date_created, type)
SELECT public.uuid_generate_v4(), dt.id, m.date_created, m.type
FROM meal AS m
JOIN dog_tmp dt ON dt.id = m.dog_id RETURNING m.id AS meal_uuid)
INSERT INTO dog_diet (id, meal_id, date_created)
SELECT public.uuid_generate_v4(), mt.meal_uuid, dd.date_created
FROM meal_tmp mt
JOIN dog_diet dd ON dd.thread_id = mt.meal_uuid;
COMMIT;
我收到此错误:[42P01] 错误:table“m”[=26= 缺少 FROM 子句条目]
在此先感谢您对此的提示,或者如果可能的话另一种方法。
快速回答:将 RETURNING m.id AS meal_uuid
更改为 RETURNING id AS meal_uuid
(db fiddle)。
所以有争议的完整声明是:
INSERT INTO meal (id, dog_id, date_created, type)
SELECT public.uuid_generate_v4(), dt.id, m.date_created, m.type
FROM meal AS m
JOIN dog_tmp dt ON dt.id = m.dog_id
RETURNING m.id AS meal_uuid
在 select 中,您将 m
设置为 meal
的别名,但其范围是 SELECT
查询(因此 m
不是在外部 insert
语句中定义)。