2017-07-26 39 views
1

PostgreSQL的:工會表,更改串行主鍵,PostgreSQL的

我有兩個表 'ABC' 和PostgreSQL的 'XYZ'。兩個表都具有相同的「id」列,其類型是「串行主鍵」。 abc表id列值1,2,3和也包含相同值的xyz id列1,2,3,4 我想用'union 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

這是一個不健全的要求。自動生成的ID沒有意義。什麼是你想解決的*真實*問題? –

+1

@LaurenzAlbe一個stackoverflow的用戶,他會停下來問「你試圖解決什麼問題,而不是解決你想解決問題的想象問題」。罕見!我喜歡! –

回答

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 
+0

ooof ,,這有點討厭;交叉連接所有行上的表,以便您可以找到最大a.id ..爲什麼不使用一個子查詢來計算max a.id,然後如果兩個表都有一百萬行,那麼您不會生成一萬億行一個號碼的緣故?加..他要求所有工會,你使用工會 - 這也會招致輕微的表現衝擊,因爲需要額外的工作來刪除重複(可能不存在) –

+0

@CaiusJard謝謝我糾正了我的答案 –