PostgreSQL:填充表的多个子选择

时间:2016-05-12 20:55:11

标签: postgresql

我有一个名为cars_denorm的非规范化表,其中包含以下列:

id | make | model | color | comment 

在规范化此数据的最后,我为makemodelcolor列创建了单独的表 - 这三个表由id列组成和name列。例如,make表包含1 -> honda2 -> mazda3 -> ford等行; color表包含1 -> black2 -> red等行。

我正在尝试填充列为

cars_norm
id | make_id | model_id | color_id | comments

并引用makemodelcolor表中的ID。基本上我想遍历cars_denorm表中的每一行,并且对于每一行,查询makemodelcolor表中的相应ID并插入这些ID作为cars_norm表中的单行(以及comments列中的值)。我一直试图通过子选择和PostgreSQL的WITH关键字实现这一点,但无法使其工作。这可以用普通的SQL来完成吗?如果没有,我如何使用函数执行此操作?

1 个答案:

答案 0 :(得分: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