我正在try 执行一个迁移,将"Questions"表分成两个表:"Campaign"和"Campaign_Actions",其中Campaign包含问题标题,Campaign操作通过Quest_id列引用问题id,然后通过Campaign_id列引用新创建的Campaign.
我try 使用关键字as
和into
返回初始SELECT中的字段.我看到的所有示例都是使用值插入到多个表中.我在将新创建的活动ID与插入到"Campaign_Actions"表中的现有问题ID相关联时遇到了问题.我试过几种方法,但这是我最新的try :
WITH campaign_questions AS (
INSERT INTO "campaigns" (name, tenant_id)
SELECT
q.title as name,
q.tenant_id as tenant_id
FROM "questions" as q
RETURNING
id into campaign_id,
q.id into question_id,
q.app_area_id into app_area_id
)
INSERT INTO "campaign_actions" (campaign_id, question_id, app_area_id)
SELECT campaign_id, question_id, app_area_id,
FROM campaign_questions
我还考虑过做一些其他的事情:在活动上添加一个临时列来保存问题ID和应用程序区域ID,这样我就可以从插入操作中返回它们,然后使用它们填充Campaign_Actions表,然后删除这些列.
以下是问题、活动和活动操作表的DBML:
table questions {
id uuid [pk, unique, default: `uuid_generate_v4()`]
app_area_id uuid [ref: > app_areas.id]
tenant_id text [not null]
title text [not null]
subtitle text
type text [not null]
data jsonb
// Timestamps
created_at timestamp [not null, default: `now()`]
updated_at timestamp [not null, default: `now()`]
deleted_at timestamp
indexes {
tenant_id [type: btree]
}
}
table campaigns {
id uuid [pk, unique, default: `uuid_generate_v4()`]
tenant_id text [not null]
name text [not null]
description text
start_at timestamp
end_at timestamp
paused_at timestamp
closed_at timestamp
published_at timestamp
// Timestamps
created_at timestamp [not null, default: `now()`]
updated_at timestamp [not null, default: `now()`]
deleted_at timestamp
indexes {
tenant_id [type: btree]
}
}
table campaign_actions {
id uuid [pk, unique, default: `uuid_generate_v4()`]
tenant_id text [not null]
campaign_id uuid [not null, ref: > campaigns.id]
type text [not null, default: "question"]
question_id uuid [ref: > questions.id]
display_type text
app_area_id uuid [ref: > app_areas.id]
// Timestamps
created_at timestamp [not null, default: `now()`]
updated_at timestamp [not null, default: `now()`]
deleted_at timestamp
indexes {
tenant_id [type: btree]
campaign_id [type: btree]
question_id [type: btree]
}
}
我想有更好的办法或者我错过了什么.如有任何帮助,我们不胜感激!