複数行で大きな挿入ステートメントを実行したいのですが、再帰により正しいSQLステートメントを作成するのが難しくなっています。例を挙げれば説明しやすくなると思います。モデルを考えてみましょう。
車両
| id |code|モデル名| | 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は赤で使用できるため)とタプル「standardnew、red」と「standardnew、同じ理由で「黒」。
PSEUDO-CODE(非SQL)は次のようになります。all_cars_and_colors= select * from car left external 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を使用してこれをどのように解決しますか?