【发布时间】:2012-12-10 16:50:02
【问题描述】:
我有一个具有以下结构的现有表
+-------------+-------+-------+-------+
| employee_id | val_1 | val_2 | val_3 | ...
+-------------+-------+-------+-------+
| 123 | A | B | C |
我想将这个表更改为 2 个表 - 一个包含单独行中的值,另一个包含为此的连接表。例如,上面会变成这样:
+-------------+--------+ +----+-------+
| employee_id | val_id | | id | value |
+-------------+--------+ +----+-------+
| 123 | 1 | | 1 | A |
+-------------+--------+ +----+-------+
| 123 | 2 | | 2 | B |
+-------------+--------+ +----+-------+
| 123 | 3 | | 3 | C |
+-------------+--------+ +----+-------+
将现有表转换为这两个新表的最佳 SQL 是什么?我可以很容易地创建值表,但我不确定如何同时创建连接表。
【问题讨论】:
-
抱歉不精通 MySQL,但任何答案都应该考虑到您的原始表可能对employee_id 有唯一性约束(例如,如果它是主键),这将导致您的新表格式出现问题...需要删除、放宽/扩展约束(例如,employee_id 和 val_id 上的复合 PK),或者创建一个 new 员工表可能更容易(当然建议复制而不是替换,无论如何,用于测试接受的任何答案)。
-
您希望从选择中为原始表的每一列运行插入。我会发布一个完整的答案,但现在不能打扰测试准确性。
-
嗨 Sepster - 这两个表都是新的,所以他们不必担心现有表的约束?
-
嗨 mikebabcock,这就是我正在做的创建新值表的工作,我只是不确定如何在执行此操作时填充连接表...
-
@JohnFarrelly 是的,你是对的,对不起 - 我误解了你正在创建新表。 PS 在用户名前使用@,以确保他们收到您在评论中提到他们的通知