我想在多行上执行一个大插入语句,但是递归使得难以构建正确的SQL语句。我相信一个例子会更容易解释。考虑模型:Postgresql中的递归插入子句
车
|id|code|Model name | |1 |100 |Deluxe | |10|100 |Deluxe improved| |2 |200 |Standard | |20|200 |Standard new |
颜色
|id|Name| |2 |Red | |3 |Blue|
car_colors
|id|car_id|color_id| |3 |1 |2 | |4 |2 |2 | |5 |2 |3 |
的多彩e车被添加,然后插入“豪华改进”模型。这是同一辆车的新版本(相同的代码)。不幸的是,John Doe忘记了更新car_colors表,所以现在你想通过为每个相同的汽车代码插入相同的颜色来更新该表。
在考虑的例子中,我们想添加元组“豪华改进,红色”(因为Deluxe和Deluxe改进了相同的代码,Deluxe有红色可用)和元组“标准新红色”和“标准的新的,黑色的”出于同样的原因。
伪码(非SQL)应该是这样的: all_cars_and_colors = SELECT * FROM车左外连接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?
如何从car_colors选择模型='豪华'? – wildplasser 2012-07-09 13:59:59
注意:删除了递归查询标记,因为问题不需要递归解决方案。 – wildplasser 2012-07-09 14:17:55
我改进了示例以使其更清晰。基于建议的答案@wildplasser,我相信目前还不清楚表中有几个*项目是否需要更新(不仅仅是豪华型) – mmalmeida 2012-07-09 14:23:51