我有一个名为cars_denorm
的非规范化表,其中包含以下列:
id | make | model | color | comment
在规范化此数据的最后,我为make
,model
和color
列创建了单独的表 - 这三个表由id
列组成和name
列。例如,make
表包含1 -> honda
,2 -> mazda
,3 -> ford
等行; color
表包含1 -> black
和2 -> red
等行。
我正在尝试填充列为
的cars_norm
表
id | make_id | model_id | color_id | comments
并引用make
,model
和color
表中的ID。基本上我想遍历cars_denorm
表中的每一行,并且对于每一行,查询make
,model
和color
表中的相应ID并插入这些ID作为cars_norm
表中的单行(以及comments
列中的值)。我一直试图通过子选择和PostgreSQL的WITH
关键字实现这一点,但无法使其工作。这可以用普通的SQL来完成吗?如果没有,我如何使用函数执行此操作?
答案 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