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 :

Select sur deux tables et left join


Sujet :

Langage SQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut Select sur deux tables et left join
    Bonjour,

    Je n'arrive pas à faire une requête SQL qui doit récupérer des infos sur 2 tables avec un LEFT JOIN:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select purchase.*, book.*  
    from purchase, book 
    LEFT JOIN purchase on book.book_id = purchase.book_id 
    WHERE purchase.user_id = 3 
    order by purchase.purchase_date
    J'ai réussi quand même le LEFT JOIN et celle-là fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select book.* 
    from book 
    LEFT JOIN purchase on book.book_id = purchase.book_id 
    WHERE purchase.user_id = 3 
    order by purchase.purchase_date
    Mais il me manque des infos qui sont dans la table purchase.

    Comment je peux faire ?

    merci,
    Vincent.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    ok, c good !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT book.*, purchase.* 
    FROM book 
        LEFT JOIN purchase ON book.book_id = purchase.book_id 
    WHERE purchase.user_id = 3 
    ORDER BY purchase.purchase_date

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    1) Puisque tu sais faire une jointure externe (LEFT JOIN), apprend à écrire correctement les jointures internes (INNER JOIN) selon la syntaxe en vigueur depuis 1992 !

    2) Évite la guerre des étoiles !
    Surtout entre deux tables qui ont des noms de colonnes identiques !

    3) Tu mets une condition de restriction (WHERE) sur la table purchase qui est située à droite de la jointure externe à gauche. Tu transformes ainsi ta jointure externe en jointure interne !

    Que cherches-tu exactement ?
    - Tous les books et leurs infos de purchase quand elles existent ?
    = > jointure externe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT b.book_id, p.purchase_date
    FROM book b
    LEFT JOIN purchase p 
    	ON b.book_id = p.book_id 
    	AND p.user_id = 3 
    ORDER BY p.purchase_date
    - Seulement les books qui ont des infos dans purchase ?
    => Jointure interne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT b.book_id, p.purchase_date
    FROM book b
    INNER JOIN purchase p 
    	ON b.book_id = p.book_id 
    WHERE p.user_id = 3 
    ORDER BY p.purchase_date

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    1) Puisque tu sais faire une jointure externe (LEFT JOIN), apprend à écrire correctement les jointures internes (INNER JOIN) selon la syntaxe en vigueur depuis 1992 !
    Je ne connaissais pas inner join et j'ai fait quelque chose qui marchait avec left join...donc j'ai utilisé.
    Et en fait il n'y a même pas besoin de INNER puisque le where va le faire automatiquement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select book.*, purchase.* from book, purchase where book.book_id = purchase.book_id and purchase.user_id = 3 order by purchase.purchase_date limit 1000
    Pour la guerre des étoiles, je suis bien d'accord mais pour les exemples je reste avec

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Disons que l'on promouvois les structures avec un inner join / left outer /etc car :
    - c'est dans la norme SQL depuis plus de 20 ans
    - ça permet une meilleur lisibiltié du code
    - ça permet d'éviter des erreurs d'oublie de jointure sur des requêtes complexe
    - c'est plus maintenable

    Donc les jointures comme vous venez de le faire sont à proscrire

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

Discussions similaires

  1. Requête "select" sur deux tables dont une vide
    Par Torgar dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/10/2009, 09h27
  2. Select sur deux tables, résultat formaté
    Par Warluck dans le forum PL/SQL
    Réponses: 2
    Dernier message: 04/12/2008, 19h45
  3. Requete mysql : select sur deux tables
    Par IP-Fix dans le forum Requêtes
    Réponses: 9
    Dernier message: 12/11/2008, 16h03
  4. SELECT sur deux tables
    Par Gaetch dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/07/2007, 15h40
  5. Select sur deux tables
    Par DJuL- dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/03/2007, 14h40

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