2016-01-08 27 views
0

我有兩個表。一(姑且稱之爲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數據是一個外鍵映射到idt,這是一個自動遞增的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列,而不是全球。新行可以安全地添加到表的最後 - 也許最好是有一個新的表與這個信息英寸

有沒有可以做到這一點的查詢?我希望我不必親自去做!

+1

觸發可以幫助你... – SMA

+1

@SMA我整個下午都在低頭桶,所以你可能是對的! – worldofjr

回答

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

相關問題