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 :

AS/400 Jointures externes


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2018
    Messages : 40
    Points : 18
    Points
    18
    Par défaut AS/400 Jointures externes
    Bonjour

    je tente de faire une requête sous query mais le problème c'est que je ne peut pas faire de jointures externe sur plus deux table.

    comment exécuter cette requête correctement. j’espère que quelqu’un pourra m'aider. merci par avance.

    il faudrait que tous les enregistrements de TARBASE.AEABSO apparaisse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TARBASE.AEABSO, TARBASF.AFDESI, TARBASE.AEDESI, FOUBASE.FONOM, STKBASE.STSTKP, TARBASE.AEAADS, TARBASE.AEJJDS, TARBASE.AEMMDS, STKBASE.STLOCA, STKBASE.STDPAA, STKBASE.STDPMM, STKBASE.STDPJJ, STKBASE.STDPAM, STKBASE.STPRMP, STKBASE.STPAMP, STKBASE.STSUCC, TARGENC.GCCODE
    FROM SERVER_AS400.DBPROD.FOUBASE FOUBASE, SERVER_AS400.DBPROD.STKBASE STKBASE, SERVER_AS400.DBPROD.TARBASE TARBASE, SERVER_AS400.DBPROD.TARBASF TARBASF, SERVER_AS400.DBPROD.TARGENC TARGENC
    WHERE TARBASE.AEABSO = STKBASE.STABSO AND TARBASE.AENFOU = FOUBASE.FONFOU AND TARBASE.AEABSO = TARBASF.AFABSO AND TARBASE.AEABSO = TARGENC.GCABS AND ((STKBASE.STSUCC='Comme ''PA''') OR (STKBASE.STSUCC='CH'))

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 284
    Points : 12 986
    Points
    12 986
    Par défaut
    Bonjour,
    On va commencer par réécrire la requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT TARBASE.AEABSO, TARBASF.AFDESI, TARBASE.AEDESI, FOUBASE.FONOM, STKBASE.STSTKP, TARBASE.AEAADS, TARBASE.AEJJDS, TARBASE.AEMMDS, STKBASE.STLOCA, STKBASE.STDPAA, STKBASE.STDPMM, STKBASE.STDPJJ, STKBASE.STDPAM, STKBASE.STPRMP, STKBASE.STPAMP, STKBASE.STSUCC, TARGENC.GCCODE
    FROM SERVER_AS400.DBPROD.TARBASE TARBASE
    INNER JOIN SERVER_AS400.DBPROD.STKBASE STKBASE ON TARBASE.AEABSO = STKBASE.STABSO 
    INNER JOIN SERVER_AS400.DBPROD.FOUBASE FOUBASE ON TARBASE.AENFOU = FOUBASE.FONFOU 
    INNER JOIN SERVER_AS400.DBPROD.TARBASF TARBASF ON TARBASE.AEABSO = TARBASF.AFABSO 
    INNER JOIN SERVER_AS400.DBPROD.TARGENC TARGENC ON TARBASE.AEABSO = TARGENC.GCABS 
    WHERE STKBASE.STSUCC='Comme ''PA''' OR STKBASE.STSUCC='CH'
    J'ai modifié l'ordre des tables pour mettre TARBASE en premier, puisque c'est la table pour laquelle tu veux toutes les lignes.
    Il faut ensuite remplacer les jointures internes par des jointures externes:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT TARBASE.AEABSO, TARBASF.AFDESI, TARBASE.AEDESI, FOUBASE.FONOM, STKBASE.STSTKP, TARBASE.AEAADS, TARBASE.AEJJDS, TARBASE.AEMMDS, STKBASE.STLOCA, STKBASE.STDPAA, STKBASE.STDPMM, STKBASE.STDPJJ, STKBASE.STDPAM, STKBASE.STPRMP, STKBASE.STPAMP, STKBASE.STSUCC, TARGENC.GCCODE
    FROM SERVER_AS400.DBPROD.TARBASE TARBASE
    LEFT OUTER JOIN SERVER_AS400.DBPROD.STKBASE STKBASE ON TARBASE.AEABSO = STKBASE.STABSO AND (STKBASE.STSUCC='Comme ''PA''' OR STKBASE.STSUCC='CH')
    LEFT OUTER JOIN SERVER_AS400.DBPROD.FOUBASE FOUBASE ON TARBASE.AENFOU = FOUBASE.FONFOU 
    LEFT OUTER JOIN SERVER_AS400.DBPROD.TARBASF TARBASF ON TARBASE.AEABSO = TARBASF.AFABSO 
    LEFT OUTER JOIN SERVER_AS400.DBPROD.TARGENC TARGENC ON TARBASE.AEABSO = TARGENC.GCABS
    Qu'est-ce qui ne va pas avec cette requête ? Qu'est-ce qui t'empêche de faire plusieurs jointures externes ?

    Tatayo.

  3. #3
    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 394
    Points
    18 394
    Par défaut
    Pourquoi ne pourriez-vous pas faire de jointure externe sur plus de deux tables ?
    Que donne cette requête ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        select tarbase.aeabso, tarbasf.afdesi, tarbase.aedesi
             , foubase.fonom , stkbase.ststkp, tarbase.aeaads
             , tarbase.aejjds, tarbase.aemmds, stkbase.stloca
             , stkbase.stdpaa, stkbase.stdpmm, stkbase.stdpjj
             , stkbase.stdpam, stkbase.stprmp, stkbase.stpamp
             , stkbase.stsucc, targenc.gccode
          from server_as400.dbprod.tarbase tarbase 
     left join server_as400.dbprod.foubase foubase  on foubase.fonfou  = tarbase.aenfou
     left join server_as400.dbprod.stkbase stkbase  on stkbase.stabso  = tarbase.aeabso
                                                   and stkbase.stsucc in ('Comme ''PA''', 'CH')
     left join server_as400.dbprod.tarbasf tarbasf  on tarbasf.afabso  = tarbase.aeabso
     left join server_as400.dbprod.targenc targenc  on targenc.gcabs   = tarbase.aeabso;

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 284
    Points : 12 986
    Points
    12 986
    Par défaut
    J'avais répondu à la question, mais mon message a disparu... Et se retrouve dans une discussion identique, mais pour Excel !
    Bizarre...

    Tatayo.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 380
    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 380
    Points : 39 862
    Points
    39 862
    Billets dans le blog
    9
    Par défaut
    Oui je m'en souviens j'avais lu ce fil

    L'autre discussion est ici : https://www.developpez.net/forums/d1...s/#post9960988

    Bizarre...

  6. #6
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 223
    Points : 85 182
    Points
    85 182
    Billets dans le blog
    15
    Par défaut
    Salut à tous,

    @ Tatayo : j'étais en train de préparer le message pour vous aviser du déplacement de la discussion, car j'ai été informé que la question portait sur MS Query (Excel).

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2018
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    Bonjour et merci pour vos réponses

    j'ai tenter d'excuter votre requete dans power query. il commence à charger quelques ligne et me retourne un message
    : erreur innatendue "un élément avec la meme clé à déja été ajouté"

    je suis un peu perdue. que faire ?

    merci pour votre aide

    Citation Envoyé par tatayo Voir le message
    Bonjour,
    On va commencer par réécrire la requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT TARBASE.AEABSO, TARBASF.AFDESI, TARBASE.AEDESI, FOUBASE.FONOM, STKBASE.STSTKP, TARBASE.AEAADS, TARBASE.AEJJDS, TARBASE.AEMMDS, STKBASE.STLOCA, STKBASE.STDPAA, STKBASE.STDPMM, STKBASE.STDPJJ, STKBASE.STDPAM, STKBASE.STPRMP, STKBASE.STPAMP, STKBASE.STSUCC, TARGENC.GCCODE
    FROM SERVER_AS400.DBPROD.TARBASE TARBASE
    INNER JOIN SERVER_AS400.DBPROD.STKBASE STKBASE ON TARBASE.AEABSO = STKBASE.STABSO 
    INNER JOIN SERVER_AS400.DBPROD.FOUBASE FOUBASE ON TARBASE.AENFOU = FOUBASE.FONFOU 
    INNER JOIN SERVER_AS400.DBPROD.TARBASF TARBASF ON TARBASE.AEABSO = TARBASF.AFABSO 
    INNER JOIN SERVER_AS400.DBPROD.TARGENC TARGENC ON TARBASE.AEABSO = TARGENC.GCABS 
    WHERE STKBASE.STSUCC='Comme ''PA''' OR STKBASE.STSUCC='CH'
    J'ai modifié l'ordre des tables pour mettre TARBASE en premier, puisque c'est la table pour laquelle tu veux toutes les lignes.
    Il faut ensuite remplacer les jointures internes par des jointures externes:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT TARBASE.AEABSO, TARBASF.AFDESI, TARBASE.AEDESI, FOUBASE.FONOM, STKBASE.STSTKP, TARBASE.AEAADS, TARBASE.AEJJDS, TARBASE.AEMMDS, STKBASE.STLOCA, STKBASE.STDPAA, STKBASE.STDPMM, STKBASE.STDPJJ, STKBASE.STDPAM, STKBASE.STPRMP, STKBASE.STPAMP, STKBASE.STSUCC, TARGENC.GCCODE
    FROM SERVER_AS400.DBPROD.TARBASE TARBASE
    LEFT OUTER JOIN SERVER_AS400.DBPROD.STKBASE STKBASE ON TARBASE.AEABSO = STKBASE.STABSO AND (STKBASE.STSUCC='Comme ''PA''' OR STKBASE.STSUCC='CH')
    LEFT OUTER JOIN SERVER_AS400.DBPROD.FOUBASE FOUBASE ON TARBASE.AENFOU = FOUBASE.FONFOU 
    LEFT OUTER JOIN SERVER_AS400.DBPROD.TARBASF TARBASF ON TARBASE.AEABSO = TARBASF.AFABSO 
    LEFT OUTER JOIN SERVER_AS400.DBPROD.TARGENC TARGENC ON TARBASE.AEABSO = TARGENC.GCABS
    Qu'est-ce qui ne va pas avec cette requête ? Qu'est-ce qui t'empêche de faire plusieurs jointures externes ?

    Tatayo.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2018
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    Bonjour et merci pour votre réponses

    j'ai tenter également comme la requete precedente d'excuter votre requete dans power query. meme constat il commence à charger quelques ligne et me retourne un message
    : erreur innatendue "un élément avec la meme clé à déja été ajouté"



    merci pour votre aide


    Citation Envoyé par Waldar Voir le message
    Pourquoi ne pourriez-vous pas faire de jointure externe sur plus de deux tables ?
    Que donne cette requête ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        select tarbase.aeabso, tarbasf.afdesi, tarbase.aedesi
             , foubase.fonom , stkbase.ststkp, tarbase.aeaads
             , tarbase.aejjds, tarbase.aemmds, stkbase.stloca
             , stkbase.stdpaa, stkbase.stdpmm, stkbase.stdpjj
             , stkbase.stdpam, stkbase.stprmp, stkbase.stpamp
             , stkbase.stsucc, targenc.gccode
          from server_as400.dbprod.tarbase tarbase 
     left join server_as400.dbprod.foubase foubase  on foubase.fonfou  = tarbase.aenfou
     left join server_as400.dbprod.stkbase stkbase  on stkbase.stabso  = tarbase.aeabso
                                                   and stkbase.stsucc in ('Comme ''PA''', 'CH')
     left join server_as400.dbprod.tarbasf tarbasf  on tarbasf.afabso  = tarbase.aeabso
     left join server_as400.dbprod.targenc targenc  on targenc.gcabs   = tarbase.aeabso;

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    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 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    QUESTION IMPORTANTE :
    Travaillez vous sur DB 400 (qui n'est pas relationnelle) ou sur DB2 sur AS 400 ?

    A +

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2018
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    je travaille sur un iseries et je me connecte via un driver odbc. je ne sais pas si c'est db400 ou db2

    nous utilisons un erp métier trés poussé au niveau du croisement des données. nous utilisons un affichage web pour se connecter a cet erp

  11. #11
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    A mon avis, ce n'est pas une erreur du moteur, mais coté client.
    L'outil utilisé pour pour accéder aux données doit certainement avoir une "fausse" clef définies sur certaines colonnes (ou toutes les colonnes non NULL comme le fait entity framework pour les vues), et se trouve avec cette fausse clef violée

  12. #12
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2018
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    peut on contourner le problème ?

  13. #13
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2018
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    bonjour

    je n'ai toujours pas solutionné mon probleme. pouvez vous m'aider svp.

    merci par avance

  14. #14
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    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 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Commencez par identifier d'où vient l'erreur et quel est le SGBDR et sa version...

    Imaginez aller voir un garagiste en disant (sans montrer la voiture et sans en donner la carte grise) : j'ai eu un problème sur la route, pouvez-vous réparer !

    A +

  15. #15
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 380
    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 380
    Points : 39 862
    Points
    39 862
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par KIKOU94430 Voir le message
    bonjour

    je n'ai toujours pas solutionné mon probleme. pouvez vous m'aider svp.

    merci par avance
    A propos de solutionner

  16. #16
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    il faut voir du coté de power query, et trouver pourquoi il attend une unicité (ou bien un autre outil, peut être même votre code qui tente de mettre les résultats dans un dictionnaire, ou autre...).
    Pour moi, ce n'est pas la requête qui pose problème au niveau de la BDD, mais l'exploitation des résultats ensuite...

    tentez de rajouter un DISTINCT à votre requête, je pense que vous n 'aurez plus ce message d'erreur (mais plus forcément le résultat voulu non plus )

Discussions similaires

  1. [CR9] faire une Jointure externe
    Par coldec dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 28/06/2005, 13h10
  2. Jointure externe compliquée
    Par miniil dans le forum Langage SQL
    Réponses: 9
    Dernier message: 19/02/2004, 10h27
  3. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 13h26
  4. [ jointure externe ] j'y pompe rien
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/12/2003, 18h57
  5. [Interbase] [Triggers] jointure externe
    Par AnestheziE dans le forum InterBase
    Réponses: 9
    Dernier message: 17/11/2003, 17h17

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