我想在多行上执行一个大的插入语句,但是递归使得构建正确的 SQL 语句变得困难。我相信一个例子会更容易解释。考虑模型:
车
|id|代号|型号名称 | |1 |100 |豪华 | |10|100 |豪华改进| |2 |200 |标准 | |20|200 |标准新 |
颜色
|id|姓名| |2 |红色 | |3 |蓝色|
car_colors
|id|car_id|color_id| |3 |1 |2 | |4 |2 |2 | |5 |2 |3 |
增加了豪华车,之后又插入了“豪华改进”车型。这是同一辆车的新版本(相同的代码)。不幸的是,John Doe 忘记更新 car_colors 表,所以现在您想通过为每个相同的汽车代码插入相同的颜色来更新该表。
在所考虑的示例中,我们想添加元组“Deluxe Improvement, red”(因为 Deluxe 和 deluxe Improvement 具有相同的代码,Deluxe 是红色的)和元组“standard new, red”和“standard new,黑色”出于同样的原因。
PSEUDO-CODE (non-sql) 应该是这样的: all_cars_and_colors = select * from car left outer join car_colors
for each(this_car:all_cars_and_colors){
if(all_cars_and_colors.color_id does not exist){
car_colors_to_copy = select * from car inner join car_colors where car.code=this_car.code
for each(color_to_copy: car_colors_to_copy){
insert into car_colors(id,car_id,color_id) VALUES (nextval('id_sequence') ,this_car.id,color_to_copy.color_id)
}
}
}
如何使用 SQL 解决这个问题?