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 :

Jointure entre trois tables


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut Jointure entre trois tables
    Bonsoir,
    J'ai trois tables sql, la première , 'appartements' la deuxième 'maison' et la troisième 'transactions' A vendre et A louer.
    La table appartements et la table maisons contiennent toutes les deux une clé étrangère 'transactionID', si l'appartement ou la maison est à vendre transactionID = 1, si c'est à louer transactionID=2.
    je voudrais faire une jointure entre elles, pour avoir dans un même tableau tous les appartements et maisosn qui sont à vendre si la condition de la requête transactionID=1 et pareille tous les appartements et maisons qui sont à louer si transactionID=2.
    Voilà la requête que j'ai testé et qui ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT appartements.Reference, maisons.Reference, transactions.ID
      FROM appartements, maisons, transactions
     WHERE appartements.transactionID = transactions.ID
       AND maisons.transactionID = transactions.ID
       AND transactions.ID = 1
    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 243
    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 243
    Points : 12 874
    Points
    12 874
    Par défaut
    Bonjour,
    Ta requête ne fonctionne que si tu as aumoins une maison ET au moins un appartement à vendre... De plus, si tu as 3 maisons et 5 appartements, elle te renvoie 15 lignes (les 15 combinaisons possibles).

    Je pense qu'il te faut une union de 2 requêtes, une qui renvoie les maisons, et l'autre les appartements.

    Tatayo.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur
    Inscrit en
    Janvier 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2012
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Salut, moi je ferai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT appartements.Reference, maisons.Reference, transactions.ID
      FROM appartements, maisons, transactions
     WHERE appartements.transactionID = transaction.transactions.ID
       AND maisons.transactionID = transaction.transactions.ID
       AND transactions.ID = 1
    Voila, je sais pas si c'est complètement juste mais moi, c'est ce que je ferai en tout cas

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 243
    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 243
    Points : 12 874
    Points
    12 874
    Par défaut
    Même problème que la requête d'origine, et surtout je ne vois pas trop l'intérêt de spécifier le schéma/la base pour la table transactions...

    Tatayo.

  5. #5
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    En passant ce n'est plus la norme utilisée pour les jointures !!
    A moins que son SGBD ne supporte pas les JOIN, mais on ne peut pas savoir car nous ne le connaissons pas.

    Les left outer join pourront régler ton problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     SELECT ID, a.reference, m.reference
     
    FROM transaction t
          LEFT OUTER JOIN appartements a
          ON a.transactionID = t.ID
     
          LEFT OUTER JOIN maison m
          ON m.transactionID = t.ID
    Il faut rajouter tes conditions.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Merci, pour vos réponses, je vais tester tous ça et revenir vous dire qu'est-ce qu'il en est.

  7. #7
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Il semble en outre y avoir confusion entre deux colonnes de la table transactions, vu qu'il n'y a que "transaction.ID" dans votre requête :
    - Celle qui détermine l'ID de la transaction à proprement parler, et qui permet semble-t-il de faire jointure avec maison et appartement.
    - Celle qui détermine la catégorie de la transaction.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Après avoir tester ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT ID, a.reference, m.reference
     
    FROM transactions t
          LEFT OUTER JOIN appartements a
          ON a.transactionID = t.ID
     
          LEFT OUTER JOIN maisons m
          ON m.transactionID = t.ID
     
    WHERE t.ID = 1
    J'obtient une table avec deux colonnes réference pour chaque type de bien, les enregistrements se répète!!
    Pour afficher tous les biens à vendre dans la même page, il ne faut pas que les références des deux types de biens soient dans la même colonne..????
    Merci pour vos réponses

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 243
    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 243
    Points : 12 874
    Points
    12 874
    Par défaut
    Si tu veux les appartements et les maisons sur la même colonne, il faut utiliser une union:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select t.id,a.id
    from transactions t
    inner join appartement a on a.transactionid = t.id
    where t.id = 1
    union all
    select t.id,m.id
    from transactions t
    inner join maison m on m.transactionid = t.id
    where t.id = 1

    Pour ta deuxième question, difficile de répondre, ça dépend du code de la page en question.

    Tatayo.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta réponse tatayo, je vais tester tous ça!

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Voilà le code après une petite adaptation, J'ai pu avoir tous les appartements et maisons qui son à vendre sur la même page.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT t.ID, a.Reference
    FROM transactions t
    INNER JOIN appartements a ON a.transactionID = t.ID
    WHERE t.ID =1
    UNION ALL 
    SELECT t.ID, m.Reference
    FROM transactions t
    INNER JOIN maisons m ON m.transactionID = t.ID
    WHERE t.ID =1
    Je vais travailler à présent sur le formulaire de recherche multicritères, toujours en piochant les infos de 3 tables.
    Merci encore une fois à toutes et à tous qui mon aidé à résoudre ce problème.
    A bientôt!!!

  12. #12
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    En supposant qu'il y ait bien une Foreign Key, quel est l'intérêt d'avoir la table Transactions si on n'y met aucun filtre et qu'on n'en prend aucun champ ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT a.transactionID , a.Reference
    FROM appartements a
    WHERE a.transactionID =1
    UNION ALL 
    SELECT m.transactionID , m.Reference
    FROM maisons m 
    WHERE m.transactionID  =1

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Ok, comme je suis toujours en quête d'apprentissage, je vais tester ce code.
    Merci

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Châpeau! j'obtiens le même résultat sans faire recours à la table transactions.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Jointure entre trois tables via SQL Developer
    Par mam51100 dans le forum Oracle
    Réponses: 4
    Dernier message: 25/01/2014, 10h20
  2. Réponses: 3
    Dernier message: 20/09/2013, 10h07
  3. [AC-2010] Formulaire - Jointure relationnelle entre trois tables
    Par arkham55 dans le forum IHM
    Réponses: 2
    Dernier message: 20/12/2012, 14h02
  4. Réponses: 8
    Dernier message: 20/05/2012, 15h19
  5. Jointures entre trois tables
    Par eat your potato dans le forum SQL
    Réponses: 4
    Dernier message: 30/05/2011, 10h52

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