2014-10-09 63 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