2017-07-26 10 views
1

Postgresql:ユニオンテーブル、シリアル主キーの変更、postgresql

私は2つのテーブル 'abc'と 'xyz'をpostgresqlに持っています。どちらのテーブルにも同じ 'id'カラムがあり、タイプは 'シリアル主キー'です。 abcテーブルidカラムの値は1,2,3であり、同じ値を含むxyz idカラム1,2,3,4 両方のテーブルを 'union all'制約で結合したいとします。 @CaiusJard のおかげで - しかし、私は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あなたが解決しようとしている問題に対する想像上の解決策の問題ではなく、 "あなたが解決しようとしている問題は何か?"まれ!私はそれが好きです! –

答えて

2

BETTERとして「ABC」のid列の最後の値の次の値に「XYZ」idカラムの値を変更したいですこれはあなたのためにそれを行う必要があります

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を実行するサブクエリを使用しないでください。両方のテーブルに100万行がある場合は、 1つの番号の酒?プラス。..彼は組合をすべて求めました、あなたは組合を使用しました - これは重複したものを削除するために余分な作業が必要となるため、若干のパフォーマンスヒットが発生します(おそらく存在しません) –

+0

@CaiusJard –

関連する問題