将数据从链接表迁移到目标表

时间:2016-01-08 16:49:15

标签: mysql data-structures migration

我有两张桌子。一个(我们称之为decltype(t))目前是一个包含数据的链接表

T&

和另一个(a)包含这样的数据

| c_id  | t_id  |
|-------|-------|
|   1   |   8   |
|   1   |   9   |
|   2   |   8   |
|   3   |   8   |
|   4   |   9   |
t中的

| id | code | value | |-------|-------|-------| | 1 | AB | 0.9 | | 2 | BC | 0 | | 3 | IM | 0 | | 4 | MC | 0 | | 5 | VI | 0 | | 6 | BC | 0.9 | | 7 | MC | 2.5 | | 8 | VI | 2.5 | | 9 | BC | 2.5 | 是映射到表t_ida的外键,这是一个自动递增的ID。

由于功能更改,我现在希望id中的数据复制t中的关联行并添加所需的a(然后将表t添加为放弃了,所以你得到这样的东西;

c_id

这将使我能够按a更改| id | c_id | code | value | |-------|-------|-------|-------| ... | 25 | 1 | VI | 2.5 | | 26 | 2 | VI | 2.5 | | 27 | 3 | VI | 2.5 | | 28 | 1 | BC | 2.5 | | 29 | 4 | BC | 2.5 | 列,而不是全局更改。可以安全地将新行添加到表的末尾 - 或者最好有一个包含此信息的新表。

是否有可以执行此操作的查询?我希望我不必手工完成!

1 个答案:

答案 0 :(得分:1)

假设我正确理解,因为您提到修改表格,这是一次性程序。

由于您有不同的列要求,因此无法将行添加到任一现有表的末尾。您必须制作新表或修改现有表。我选择了前者,然后您可以使用CREATE TABLE ... SELECT ...语法填充它:

CREATE TABLE new_t (id SERIAL, c_id INT, code VARCHAR(2), value FLOAT);

INSERT INTO new_t (c_id, code, value)
    SELECT a.c_id, t.code, t.value FROM a INNER JOIN t ON (t.id = a.t_id);

http://sqlfiddle.com/#!9/c6765/2