2016-05-12 15 views
0

を移入するために、私は、次の列を有するcars_denorm名前の非正規化テーブルを有する:のPostgreSQL:複数のサブ選択テーブル

id | make | model | color | comment 

このデータを正規化するために、私は、makemodelために別々のテーブルを作成し、color列 - これらの3つの表は、id列とname列で構成されています。たとえば、makeテーブルは、1 -> honda,2 -> mazda,3 -> fordなどの行を持ちます。 colorテーブルには、1 -> black2 -> redなどの行が含まれています。

私は列

id | make_id | model_id | color_id | comments 

していて、makeからIDS、model、およびcolorテーブルを参照するcars_normテーブルを移入しようとしています。基本的には、cars_denormテーブルのすべての行と、すべての行について、makemodel、およびcolorテーブルのそれぞれのIDをクエリし、これらのIDをcars_normテーブルの1行として挿入しますcommentsの列)。私はサブ選択とPostgreSQLのWITHキーワードでこれを達成しようとしてきましたが、動作させることはできません。プレーンなSQLでこれを行うことはできますか?そうでない場合は、どのように関数でこれを行うのですか?

答えて

0
INSERT INTO cars_norm 
     SELECT CD.id, 
      MK.make_id, 
      MO.model_id, 
      CO.color_id, 
      CD.comment 
     FROM cars_denorm CD 
     JOIN make MK 
     ON CD.make = MK.name 
     JOIN model MO 
     ON CD.model = MO.name 
     JOIN color CO 
     ON CD.color = CO.name 
関連する問題