IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Union de tables


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 23
    Points : 19
    Points
    19
    Par défaut Union de tables
    Bonjour,

    J'ai deux schemas, scheme1 et scheme2 dans une base postgresql qui contiennent chacun la même table 'report' avec disons 3 colonnes A | B |C.

    J'aimerai créer une vue qui serait la concaténation de ces deux tables. J'utilise pour cela l'instruction suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create view v1 
    as 
    select *
    from scheme1.report
    union  ALL
    select *
    from scheme1.report
    Maintenant mon problème, c'est que j'aimerai avoir dans ma vue une colonne supplémentaire qui serait le nom du schema pour obtenir quelquechose du style:

    schema | A | B | C
    --------------------
    scheme1 | x | y | z
    scheme1 | u | v |w
    scheme2 | d | e | f

    Comment pourrais-je rajouter cette colonne ?

    d'avance merci.

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    comme ceci ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE VIEW v1 
    AS 
    SELECT "scheme1", *
    FROM scheme1.report
    union  ALL
    SELECT "scheme2", *
    FROM scheme2.report

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Oui en effet ça pourrait être la solution sauf que mon problème est un peu plus complexe. Je ne suis pas censé connaitre le nom des schemas. Je m'explique:

    Chacun des schemas dans ma base correspond a un client de mon appli. (Chaque client ayant la même organisation de tables). Or il se trouve que par moment dans mon appli j'ai besoin de faire des requêtes transversales sur tous les clients.

    J'ai donc besoin d'une vue qui ferait en quelque sorte une concatenation des tables 'report' de chaque schéma avec une colonne supplémentaire générée qui contiendrait le nom du schema (dc du client).
    Cela sans savoir à l'avance ni le nombre, ni le nom de chaque schema.

    Voila. Si vous avez des pistes pour créer cette vue, j'apprécierai.
    J'avoue que je ne vois pas trop comment ecrire cela. Mes connaissances en sql sont relativement limitées.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Dans Postgres comme dans tout SGBDR à peu près conforme à la norme SQL, il existe un 'information_schema' qui contient le descriptif de tout ce que contient la base de données (schémas, tables, colonnes...) et que tu peux interroger comme un schéma normal.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Oui j'arrive en effet à récupérer la liste de mes schemas sachant que chacun des schemas clients possède le même préfixe 'cp'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select schemaname from pg_tables where schemaname ~* 'cp'
    C'est plus la 'boucle' pour faire l'union des tables qui me pose souci en fait.

    Je continue mes recherches

Discussions similaires

  1. [CR 7] report qui utilise une union de table ?
    Par belaggoun2000 dans le forum SAP Crystal Reports
    Réponses: 16
    Dernier message: 29/01/2010, 10h40
  2. Union de tables périodiques
    Par mister2502 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 25/03/2009, 17h54
  3. Union et tables à champs identiques
    Par bastien dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/07/2008, 21h55
  4. Union de tables
    Par abdelghani_k dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/05/2007, 17h08
  5. [Access-VBA] Requête UNION avec tables liées
    Par adriano057 dans le forum Access
    Réponses: 4
    Dernier message: 28/07/2006, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo