我有两个表。一个(我们称之为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 |
表a
中的t_id
是映射到表 t
中的外键id
,这是一个自动递增的 ID。
由于功能更改,我现在希望来自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 |
这将使我能够按c_id
更改value
列,而不是全局更改。新行可以安全地添加到表的末尾 - 或者最好有一个包含此信息的新表。
有没有可以做到这一点的查询?我希望我不必手工完成!
假设我理解正确,既然您提到了修改表,这是一个一次性过程。
您将无法将行添加到任一现有表的末尾,因为您有不同的列要求。您必须创建一个新表或修改现有表。我选择了前者,然后您可以使用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