尝试进行插入,从表中获取数据并将其拆分为另一个表中的两行(或更多行),同时保留父表中的外键。对于此示例,假设父表是 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。这个有点超出我的范围了。
您可以合并两个查询,然后用 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 |