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 :

LEFT JOIN ET COMPANIE


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 39
    Points : 35
    Points
    35
    Par défaut LEFT JOIN ET COMPANIE
    Bonjour

    Voici la hierarchie de mes tables

    dossier / ligne_dossier / hotel / regime
    / piscine
    / billet

    J'essaye desesperement de faire une requete pour en ayant le num de dossier retrouver tout les infos de celui ci..

    J'utilise des LEFT JOIN pour hotel/piscine/billet afin de le relier a ligne dossier
    mais ensuite je voudrais relier hotel et regime ensemble. Le hic viens que je ne peux plus faire de INNER JOIN dans mon FROM. De plus, je ne pas le mettre dans mon where car dans le cas ou ma ligne de dossier n'est pas un hotel rien ne sort. Je dispose d'un Mysql ne permettqnt pqs de fqire des requetes imbriquees

    SELECT DISTINCT *
    FROM
    dossier,
    ligne_dossier
    LEFT JOIN hotel ON ligne_dossier.id_ligne_dossier = hotel.id_ligne_dossier
    LEFT JOIN piscine ON ligne_dossier.id_ligne_dossier = piscine.id_ligne_dossier
    LEFT JOIN billet ON ligne_dossier.id_ligne_dossier=billet.id_ligne_dossier

    WHERE dossier.id_dossier='13' AND dossier.id_dossier=ligne_dossier.id_dossier



    Je pensais trouver une solution autour d'une "imbrication" de LEFT JOIN au niveau de hotel --->
    LEFT JOIN ( hotel left join regime on hotel.id_hotel=regime.id_hotel) ON ligne_dossier.id_ligne_dossier = hotel.id_ligne_dossier



    Merci beaucoup de sauvez la vie d'un petit stagiaire

  2. #2
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Salut,

    Difficile de t'aider sans savoir les relations qui existent entre les tables.

    Remarque : pour "imbriquer" comme tu dis des join, inutile de faire des sous requêtes il suffit simplement d'écrire les join à la suite : table1 join table2 join table3 etc ...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 39
    Points : 35
    Points
    35
    Par défaut
    ben une structure disons "classique"

    dossier : id_dossier
    ligne_dossier : id_ligne_dossier , id_dossier
    hotel : id_hotel , id_ligne_dossier
    piscine : id_piscine, id_ligne_dossier
    regime : id_regime , id_hotel


    Le probleme avec les "join" c'est que je peux les faires que entre deux tables
    alors que je doit pouvoir retrouver ma ligne avec hotel et piscine

    en plus je pourrais faire
    ligne_dossier
    LEFT JOIN hotel ON CRITERE
    LEFT JOIN piscine ON CRITERE

    mais après je ne peux plus utiliser de join ente hotel et regime car mysql me dit que hotel est deja
    Not unique table/alias: 'v2_detail_hotel'

    merci beaucoup

  4. #4
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Normalement MySQL permet de faire un join sur autant de tables qu'on veut. Tu joins peut être deux fois la même table ou quelque chose comme ça.

    Pour moi si tu fais la chose suivante ça doit marcher !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT DISTINCT *
    FROM
    dossier
    LEFT JOIN ligne_dossier ON ligne_dossier.id_dossier = dossier.id_dossier
    LEFT JOIN hotel ON ligne_dossier.id_ligne_dossier = hotel.id_ligne_dossier
    LEFT JOIN piscine ON ligne_dossier.id_ligne_dossier = piscine.id_ligne_dossier
    LEFT JOIN billet ON ligne_dossier.id_ligne_dossier=billet.id_ligne_dossier
    LEFT JOIN regime ON regime.id_hotel = hotel.id_regime
    WHERE dossier.id_dossier='13'

  5. #5
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    Il faut que tu penses en terme d'ensemble.
    Si tu as besoin de joindre 1 table à plusieurs autres tu fais qquechose comme
    table1 t1
    JOIN table2 t2 ON t1.a1 = t2.a1
    AND t1.a2 = t2.a2
    JOIN table3 ON t1.a3 = t3.a3
    AND t2.a3 = t3.a3
    LEFT JOIN table t4 ON t1.a4 = t4.a4
    Tu n'as pas besoin d'ajouter 2 fois la même table dans ta requête.

    Si tu as besoin d'extraire 2 ensembles de résultats différents de la même table. tu la qualifies par 1 Alias (AS nom) & SQL considèrera qu'il s'agit de 2 tables différentes

    Si tu veux plus de précisions sur ton cas précis postes ta requête et 1 exemple de ce que tu veux obtenir.
    A +

  6. #6
    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
    Le mélange de jointure dans le where et dans le join est une hérésie qui ne peut conduire qu'a des imbécilité.

    Dès lors qu'une branche de l'arbre de jointure doit être développée en OUTER il faut la poursuivre telle qu'elle...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT *
    FROM   dossier D
           INNER JOIN ligne_dossier LD ON D.id_dossier = LD.id_dossier
              LEFT OUTER JOIN hotel H     ON LD.id_ligne_dossier = H.id_ligne_dossier
                 LEFT OUTER JOIN regime R ON H.id_hotel = R.id_hotel     
              LEFT OUTER JOIN piscine P   ON LD.id_ligne_dossier = P.id_ligne_dossier
              LEFT OUTER JOIN billet B    ON LD.id_ligne_dossier = B.id_ligne_dossier
    WHERE  D.id_dossier = 13
    A +

Discussions similaires

  1. count() dans *plusieurs* LEFT JOIN
    Par silver_dragoon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2004, 18h20
  2. LEFT JOIN avec Oracle 8i ne va pas... doit utiliser (+)
    Par loikiloik dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/04/2004, 17h38
  3. Interbase et left join
    Par Zog dans le forum Bases de données
    Réponses: 4
    Dernier message: 23/03/2004, 09h55
  4. Non coincident MySQL (Left Join)
    Par Remiguel dans le forum Requêtes
    Réponses: 6
    Dernier message: 03/11/2003, 22h25
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 14h57

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