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
答案 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一起删除。