我想在多行上執行一個大插入語句,但是遞歸使得難以構建正確的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