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

Langage SQL Discussion :

[IBM i / DB2/400] - [V7R3] - jointure avec renommage de colonnes


Sujet :

Langage SQL

  1. #1
    Membre actif
    Homme Profil pro
    Architecte technique & logiciel IBM i
    Inscrit en
    Septembre 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique & logiciel IBM i
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2010
    Messages : 179
    Points : 275
    Points
    275
    Par défaut [IBM i / DB2/400] - [V7R3] - jointure avec renommage de colonnes
    Bonjour.
    je veux comparer le contenu de tables identiques présentes dans 2 bibliothèques (pour trouver les écarts). Donc par exemple, je fais cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select '>>> 001 >>>' d001, x1.*, '>>> 002 >>>' d002, x2.*
    from      lib001.table x1
         join lib002.table x2 on (x2.col1, x2.col2) = (x1.col1, x1.col2)
    order by x1.col1, x1.col2
    ;
    Si je veux faire un EXCEL qui contienne :
    - Les présents dans lib001 et absents de lib002,
    - Les présents dans lib002 et absents de lib001,
    - Les communs,
    je fais 4 requêtes CTE (left exception join, right exception join, join et des union) avec un select final que je voudrais ordonner (order by).

    Comme les colonnes sont identiques à la sortie de chaque requête CTE, ce que je voudrais, c'est pouvoir préfixer de manière globale (pas individuelle, il y a trop de colonne dans la table) les colonnes de la table de lib001 (ex. : x1_xxxxxxx) et celles de la table de lib002 (ex. : x2_xxxxxxx) afin de pouvoir faire un order by x1_ ou x2_...

    Y-t'il un moyen au niveau du select d'indiquer d'ajouter au préfixe au nom de colonne retourné ?

    Merci.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 669
    Points
    39 669
    Billets dans le blog
    9
    Par défaut
    Bonjour

    Je suis surpris par la syntaxe de votre jointure on (x2.col1, x2.col2) = (x1.col1, x1.col2) au lieu de on x2.col1 = x1.col1 and x2.col2=x1.col2), ça fonctionne ça ?

    Sinon, pourquoi 4 CTE, un simple FULL OUTER JOIN vous donnera tous les cas

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 882
    Points : 53 061
    Points
    53 061
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour

    Je suis surpris par la syntaxe de votre jointure on (x2.col1, x2.col2) = (x1.col1, x1.col2) au lieu de on x2.col1 = x1.col1 and x2.col2=x1.col2), ça fonctionne ça ?
    Norme SQL 2 de 1992... ROW VALUE CONSTRUCTOR..; Peu implémenté mais tellement pratique :
    https://sqlpro.developpez.com/cours/sqlaz/select/#L8

    A +

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    C'est implémenté sous PostgreSQL et Oracle.
    En dehors des jointures, ça permet aussi de faciliter des filtres quand on recherche des éléments précis identifiés par plusieurs colonnes.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    where (col1 = 'A1' and col2 = 'B1' and col3 = 'C1')
       or (col1 = 'A2' and col2 = 'B2' and col3 = 'C2')
       or (col1 = 'A3' and col2 = 'B3' and col3 = 'C3')
    Devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where (col1, col2, col3) in (('A1', 'B1', 'C1'), ('A2', 'B2', 'C2'), ('A3', 'B3', 'C3'))

Discussions similaires

  1. @OneToMany - jointure avec table ou colonne ?
    Par Hole_geek dans le forum JPA
    Réponses: 0
    Dernier message: 14/03/2012, 12h24
  2. jointure avec clé composée de 2 colonnes
    Par free07 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/10/2005, 07h07
  3. Réponses: 2
    Dernier message: 27/10/2005, 11h15
  4. jointure avec xslt
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/09/2005, 10h48
  5. [SAGE]Jointures avec SGBD
    Par mat.M dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 09/10/2003, 12h23

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