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

标签 mysql database-normalization

表格可视化

旧车

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 中,但我不想只使用颜色名称,而是使用主键 colorId 来自 carColors 表。

结果看起来像这样...

新车

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

关于mysql - 规范化 SQL - 根据另一个表中的匹配字符串将列设置为主键标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35281959/

相关文章:

mysql - Django 应用程序上的 SQL 注入(inject)

MySQL LAST_INSERT_ID() 潜在问题

mysql - 我的表需要更多规范化吗?

database - 在数据库列中存储分隔列表真的那么糟糕吗?

database-design - 数据库设计 : 1st Normal Form and Repeating Groups

php - 让 bind_results 在 while 循环中工作的问题

mysql - 选择最近的 MAX() 和 MIN() - WebSQL

php - SQL查询更新两次

database - 在数据库列中存储分隔列表真的那么糟糕吗?

database - 在数据库列中存储分隔列表真的那么糟糕吗?