2016-05-12 36 views
0

我有一个名为cars_denorm非规范化表具有以下的列:的PostgreSQL:多个子选择中填充表

id | make | model | color | comment 

正火此数据的最后,我创建单独的表为makemodelcolor列 - 这三个表由id列和name列组成。例如,make表具有诸如1 -> honda,2 -> mazda,3 -> ford; color表包含诸如1 -> black2 -> red的行。

我试图填充cars_norm表,这是列

id | make_id | model_id | color_id | comments 

,而且IDS从makemodel,并color表的引用。基本上我想遍历cars_denorm表中的每一行,并且对于每一行,查询make,modelcolor表中的相应ID,并将这些ID插入cars_norm表中的单个行(以及来自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