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 :

[Hôtel SQL Pro] Requête PostgreSQL LEFT OUTER


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut [Hôtel SQL Pro] Requête PostgreSQL LEFT OUTER
    Bonjour,

    Dans les cours de SqlPro , il y a une partie consacré au LEFT OUTER JOIN, avec notamment la requête suivante :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT C.CLI_NOM, T.TEL_NUMERO 
    FROM   T_CLIENT AS C 
           LEFT OUTER JOIN T_TELEPHONE AS T 
                ON C.CLI_ID = T.CLI_ID 
    WHERE  T.TYP_CODE = 'FAX' 
    ORDER BY C.CLI_NOM

    Or en PostgreSQL pour obtenir le résulta voulu il faut mettre le prédicat dans la condition de jointure comme ceci :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT C.CLI_NOM, T.TEL_NUMERO 
    FROM   T_CLIENT AS C 
           LEFT OUTER JOIN T_TELEPHONE AS T 
                ON C.CLI_ID = T.CLI_ID AND  T.TYP_CODE = 'FAX' 
    ORDER BY C.CLI_NOM

    Existe-t-il une réponse logique à cela, ou ai-je louper un épisode.

    Merci de vos lumières.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Aucune explication logique à mon avis, sinon une coquille (pour ne pas dire une erreur)
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Effectivement, comme je l'explique dans mon blog, la requête de SQLPro comporte en fait une jointure interne !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Effectivement, comme je l'explique dans mon blog, la requête de SQLPro comporte en fait une jointure interne !
    Ta as essayé ton exemple sur quel DB ?, peut-être que certain moteur palie ?

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Parmi les SGBD que j'ai pratiqué (Oracle, SQL-Server, Sybase), ça fonctionne ainsi.
    La lecture régulière du forum me faire dire que c'est pareil chez PostGreSQL ainsi que MySQL.

    C'est tout à fait normal et expliqué dans le blog de Cinephil, peut-être pas assez mis en évidence.

    Si je reprends son exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT A.idA, A.valA, B.idB, B.valB, B.booleen 
      FROM A 
           LEFT OUTER JOIN B
             ON B.idA = A.idA;
     
    idA, valA  , idB , valB  , booleen
    1  , 'toto', NULL, NULL  , NULL
    2  , 'titi', 1   , 'riri', 0
    3  , 'tata', 2   , 'fifi', 1
    En rajoutant le filtre WHERE B.booleen = 1, on voit bien que seule la troisième ligne répond à ce critère.

    En fait, vous demandez à ce qu'un élément de B soit forcément non-nul, la jointure externe n'a plus de sens et le résultat devient le même qu'avec une jointure forte.

  6. #6
    Membre Expert Avatar de bernard59139
    Profil pro
    Retired
    Inscrit en
    Octobre 2006
    Messages
    966
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retired

    Informations forums :
    Inscription : Octobre 2006
    Messages : 966
    Par défaut
    Bonjour

    je me permet de completer les réponses.
    • ON décrit les critères de jointures
    • WHERE décrit les filtres


    Les 2 requêtes données en exemple par MaitrePylos, ne donneront pas un résultat identique, sauf si la table T_TELEPHONE posséde 1 ligne pour chaque CLI_ID.

Discussions similaires

  1. [MySQL] Requête & Jointure LEFT OUTER JOIN
    Par MatthieuQ dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/03/2012, 14h22
  2. SQL server 2005 : left outer join
    Par backdraf dans le forum Développement
    Réponses: 3
    Dernier message: 31/05/2011, 18h04
  3. problème requête left outer
    Par KHVince dans le forum Développement
    Réponses: 2
    Dernier message: 30/05/2011, 16h33
  4. left outer join SQL/ODBC
    Par chidalife dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 17/06/2010, 09h49
  5. Requête SQL LEFT OUTER JOIN
    Par dam28800 dans le forum Langage SQL
    Réponses: 42
    Dernier message: 27/02/2009, 14h41

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