Oracle SQL 插入多行并从单个外键拆分数据

问题描述 投票:0回答:1

尝试进行插入,从表中获取数据并将其拆分为另一个表中的两行(或更多行),同时保留父表中的外键。对于此示例,假设父表是 Fruit 并具有列:fruit_id、num_fruit。我要插入的表是 Fruit_Sub,其列为:Fruit_Sub_id、Fruit_id_FK、fruit_name、num_sub_fruit。

要插入 Fruit_sub 的每一行水果,知道 Fruit.num_fruit 中始终有 3 个苹果,其余的是香蕉。

如果水果看起来像这样:

fruit_id    num_fruit
1           5
2           9
3           4

我想像这样插入到 Fruit_sub 中:

fruit_sub_id    fruit_id_fk fruit_name  num_sub_fruit
1               1           apples      3
2               1           bananas     2
3               2           apples      3
4               2           bananas     6
5               3           apples      3
6               3           bananas     1

到目前为止,我对它的所有破解甚至都不能被识别为 sql。这个有点超出我的范围了。

sql oracle sql-insert
1个回答
0
投票

您可以合并两个查询,然后用 row_number 窗口函数包装以生成 sub_id。

select 
  row_number() over (order by fruit_id, fruit_name) as fruit_sub_id, 
  fruit_id, 
  fruit_name, 
  num_sub_fruit
from (
 select 
  fruit_id, 
  'apples' as fruit_name, 
  3 as num_sub_fruit
 from fruit
 union
 select 
  fruit_id, 
  'bananas', 
  num_fruit - 3 
 from fruit
 )z
order by 1,2,3
FRUIT_SUB_ID 水果_ID 水果名称 NUM_SUB_FRUIT
1 1 苹果 3
2 1 香蕉 2
3 2 苹果 3
4 2 香蕉 6
5 3 苹果 3
6 3 香蕉 1

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.