2014-10-09 48 views
0

我有沿行的表格覆蓋一組表中的行與另一 -pgSQL的基於ID

set_id, id, ... 
0, 1, a, b, ... 
1, 1, c, d, ... 
2, 1, e, f, ... 
0, 2, g, h, ... 
1, 2, i, j, ... 
2, 2, k, l, ... 

其中(SET_ID,ID)是一個主鍵

我想更換所有領域,除了SET_ID所有條目與SET_ID 0用等價條目(如果存在的話)與SET_ID 1所以上表將成爲 -

set_id, id, ... 
0, 1, c, d, ... < 
1, 1, c, d, ... 
2, 1, e, f, ... 
0, 2, i, j, ... < 
1, 2, i, j, ... 
2, 2, k, l, ... 

是否有一個健全的辦法做到這一點的SQL或做我需要使用一些客戶端代碼?

感謝

+3

你能否以表格形式分享想要的結果?我很難理解這個解釋。 – 2014-10-09 15:21:31

+0

更新了帖子 – Hector 2014-10-09 15:34:19

回答

1

如果我讀正確,你想要的數據的行與set_id=1set_id=0複製到一行的id每個值。

這樣做的一種方法是做一個簡單的UPDATEFROM;

UPDATE mytable 
SET field_a = ms.field_a, field_b = ms.field_b 
FROM mytable ms 
WHERE mytable.id=ms.id AND mytable.set_id=0 AND ms.set_id=1 

請注意,您需要列出您想要移動的字段,所有字段的「行副本」不是自動的。

An SQLfiddle to test with

+0

謝謝 - 看起來不錯。要測試和接受,如果一切順利的話:) – Hector 2014-10-09 15:35:35

+0

不幸的是,雖然這與mysql的工作,它似乎與postgres:/ – Hector 2014-10-09 15:45:15

+1

@ user2036256糟糕,誤讀爲MySQL然而,發生。更新PostgreSQL。 – 2014-10-09 15:53:46