我有两张桌子。一个(我们称之为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_id
中a
的外键,这是一个自动递增的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 |
列,而不是全局更改。可以安全地将新行添加到表的末尾 - 或者最好有一个包含此信息的新表。
是否有可以执行此操作的查询?我希望我不必手工完成!
答案 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);