union表,更改串口主键,postgresql

时间:2017-07-26 07:49:54

标签: sql postgresql union

PostgreSQL的:

我有两张桌子' abc'和' xyz'在postgresql中。两张桌子都有相同的内容。键入的列是'串行主键;'。         abc table id列值为1,2,3,xyz id列包含相同的值1,2,3,4         我希望将这两个表与'all all'联合起来。约束。但我想改变' xyz' id列值到下一个值' abc' id列的最后一个值为1,2,3,4,5,6,7

select id from abc
union all
select id from xyz

|id|
 1
 2
 3
 1
 2
 3
 4

my wanted resuls as
|id|
 1
 2
 3
 4
 5
 6
 7

2 个答案:

答案 0 :(得分:2)

更好 - 感谢@CaiusJard 这应该为你做

select id FROM abc 
UNION ALL select x.id + a.maxid FROM xyz x, 
(SELECT MAX(id) as maxid from abc) a
ORDER BY id

答案 1 :(得分:0)

对于正在做这样的事情的人:

我有一个类似的问题,我的表A和表B有两个不同的序列号。我的解决方案是创建一个新表C,该表与表B相同,只不过它有一个“ oldid”列,并且将id列设置为使用与表A相同的顺序。然后,我将表B中的所有数据插入表中C(将id放入oldid字段)。一旦我固定了引用,使其指向从oldid到(新)id,就可以删除oldid列。

就我而言,我需要修复旧的关系,并希望它在将来保持唯一性(但我不在乎表A的ID必须都在表C的ID之前)。根据您要完成的工作,此方法可能会有用。

如果有人要使用这种方法,严格来说,应该有一个触发器来防止有人手动在一个表中设置一个ID以匹配另一个表。您还应该更改要归NONE拥有的序列,这样如果表A曾经被删除,它就不会与表A一起删除。