2017-07-26 1 views
1

Postgresql:table union, changement clé primaire série, postgresql

J'ai deux tables de l'abc 'et 'xyz' en postgresql. Les deux tables ont les mêmes colonnes 'id' dont le type est 'serial primary key'. Les valeurs de colonnes d'ID de table abc sont 1,2,3 et aussi la colonne d'identifiant xyz contenant les mêmes valeurs 1,2,3,4 Je veux réunir les deux tables avec la contrainte 'union all'. Mais je veux changer les valeurs de la colonne id « xyz » à la prochaine valeur de la colonne id « abc » dernière valeur 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

Ceci est une condition sine qua non. Les ID générés automatiquement n'ont aucune signification. Quel est le problème * réel * que vous voulez résoudre? –

+1

@LaurenzAlbe un utilisateur de stackoverflow qui s'arrête pour demander "quel est le problème que vous essayez de résoudre, plutôt que le problème avec votre solution imaginaire au problème que vous essayez de résoudre". Rare! J'aime ça! –

Répondre

2

MIEUX - Merci à @CaiusJard Cela devrait le faire pour vous

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, c'est un peu méchant; croiser les tables sur toutes les lignes juste pour que vous puissiez trouver le max. a.id .. Pourquoi ne pas utiliser une sous-requête qui calcule le maximum a.id puis si les deux tables ont un million de lignes, vous ne générez pas un trillion de lignes pour l'amour d'un numéro? De plus .. il a demandé l'union tout, vous avez utilisé union - cela entraînera également un léger coup de performance, comme un travail supplémentaire est nécessaire pour supprimer les doublons (qui n'existent probablement pas) –

+0

@CaiusJard Merci j'ai corrigé ma réponse –