规范化 SQL - 根据另一个表中的匹配字符串将列设置为主键标识符



表可视化

旧车

carId | color | etc    // Column Name
1     | red   | *
2     | blue  | *
3     | teal  | *
4     | red   | *

汽车颜色

colorId | color | etc  // Column Names
1       | blue  | *
2       | teal  | *
3       | red   | *

新车

carId | colorId | etc  // Column Names

我正在尝试规范化数据库。我想做的是从oldCars插入到newCars的每一行中,但我想使用carColors表中的主键colorId,而不是仅使用颜色名称。

结果看起来像这样...

新车

carId | colorId | etc  // Column Names
1     | 3       | *
2     | 1       | *
3     | 2       | *
4     | 3       | *

这种说法似乎微不足道,但我想不通。

这只是

一个简单的JOIN,使用颜色名称作为连接条件。

INSERT INTO newCars
SELECT o.carID, c.colorID, o.etc
FROM oldCars AS o
JOIN carColors AS c ON c.color = o.color

最新更新