pgSQL根据ID覆盖一组表行和另一组表行

时间:2014-10-09 15:18:22

标签: sql database postgresql

我有一张表 -

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 0替换除set_id之外的所有字段,并使用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中执行此操作或我是否需要使用一些客户端代码?

由于

1 个答案:

答案 0 :(得分:1)

如果我正确阅读,您希望将set_id=1行中的数据复制到set_id=0的行idUPDATE

这样做的一种方法是使用FROM做一个简单的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 ;

{{1}}

请注意,您需要列出要移动的字段,所有字段的“行复制”不是自动的。

An SQLfiddle to test with