这些是我的数据库中的现有表。Expense和Revenue表中的字段"record_prt_id"是与Record表中的字段"id"相关的外键。
- -记录
| 身份证|数量|记录日期|属性标识|
| - ------|- ------|- ------|- ------|
| 1个|一百元|2022年10月15日|1个|
| 第二章|一百五十元|2022年12月22日|1个|
| 三个|两千元|2022年10月1日|第二章|
| 四个|一千五百元|2022年11月1日|1个| - -费用
| 记录指针标识|费用_类型|
| - ------|- ------|
| 1个|修复|
| 第二章|水| - -收入
| 记录指针标识|收入类型|
| - ------|- ------|
| 三个|租金|
| 四个|偿还|
我需要插入这两项新费用: - -临时费用
| 数量|记录日期|费用_类型|属性标识|
| - ------|- ------|- ------|- ------|
| 五十元|二○二二年九月十三日|电力|第二章|
| 一百元|二○二二年八月十五日|垃圾|三个|
我首先需要将这两项费用插入到记录表中,然后插入到费用表中,最终结果如下所示: - -记录
| 身份证|数量|记录日期|属性标识|
| - ------|- ------|- ------|- ------|
| 1个|一百元|2022年10月15日|1个|
| 第二章|一百五十元|2022年12月22日|1个|
| 三个|两千元|2022年10月1日|第二章|
| 四个|一千五百元|2022年11月1日|1个|
| 五个|五十元|二○二二年九月十三日|第二章|
| 六个|一百元|二○二二年八月十五日|三个| - -费用
| 记录指针标识|费用_类型|
| - ------|- ------|
| 1个|修复|
| 第二章|水|
| 五个|电力|
| 六个|垃圾|
下面是我的疑问:
WITH inserted_records AS (
INSERT INTO record(amount, record_date, property_id)
SELECT e.amount, e.record_date, e.property_id
FROM expense_tmp e
RETURNING id, /* this doesn't work */ e.expense_type
)
INSERT INTO expense(record_prt_id, expense_type)
SELECT r.id, r.expense_type
FROM inserted_records r;
但是postgres给了我这个错误
错误:表格"e"行5缺少FROM子句条目:退货标识,即费用类型
我需要在第二个INSERT语句的RETURNING子句中获取expense_type列,如何实现这一点?
1条答案
按热度按时间aelbi1ox1#
您可以向事务添加更多CTE语句,并在插入记录之前生成插入ID,以避免一些小问题。
横向和顺序性也可通过以下方式交换: