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 spécial avec jointure


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut SELECT spécial avec jointure
    Bonjour
    je souhaite faire un SELECT avec jointure entre 2 tables mais je n'y arrive pas. J'aurais besoin de vos conseils svp.

    J'ai 2 tables (T1 et T2). La table T1 contient 2 champs (une date, et un ID qui est un entier). La table T2 contient 2 champs (un ID qui est un entier, et un libellé qui est du texte). La jointure se fait sur ID.
    La requête est donc par exemple SELECT date, libelle FROM T1 INNER JOIN T2 ON T1.ID = T2.ID

    Cela marche mais le problème est qu'il se peut que certains libellés ne soient pas renseignés dans la table T2. Dans ce cas de figure, je souhaiterais que le SELECT me retourne tout simplement les ID pour ceux qui n'ont pas de libellés, et je ne sais pas comment écrire cette requête.

    Par exemple, avec les tables suivantes
    ==T1==
    1/1/09 ; 1
    2/5/09 ; 3
    4/6/09 ; 2
    ==T2==
    1 ; Chaise
    2 ; Table


    la requête devrait me retourner cela :
    1/1/09 ; Chaise
    2/5/09 ; 3
    4/6/09 ; Table


    Comment doit-on alors écrire le SELECT en question ?

    Merci beaucoup
    Thierry

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Question qui as toute son importance
    Lorsque le libéllé n'est pas renseigné dans la table2, as-tu quand même une ligne avec l'ID de renseigné ou alors la ligne est-elle absente (ni l'ID, ni le libellé n'est renseigné) ?
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Bon j'avais pas bien vu ton exemple.

    A priori tu n'as ni libellé ni ID. Donc dans ce cas là il ne te faut pas une jointure interne car la ligne correspondante de la table 1 ne serait pas non plus retournée. Il te faut une jointure externe gauche.

    Et une requete du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T1.date, ISNULL(T2.libelle,T1.id) 
    FROM T1 
    LEFT OUTER JOIN T2 ON T1.id = T2.id
    La fonction ISNULL renvoie, dans le cas présent
    - Si T2.libelle est Null : T1.id
    - Sinon T2.libelle

    A voir maintenant si ton moteur de bdd connais ISNULL
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Sevyc64, merci beaucoup. Ta réponse fonctionne à merveille.

    Pour info, j'utilise SQL Server 2005 et ISNULL est bien reconnu.

    Merci
    Thierry

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

Discussions similaires

  1. Select count avec jointure, en récupérant les 0 : possible ?
    Par littlewings dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2008, 12h57
  2. select count avec jointure, en récupérant les 0
    Par littlewings dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/07/2008, 11h58
  3. [c#]commande Select avec jointure de deux tables
    Par chorokari dans le forum Accès aux données
    Réponses: 6
    Dernier message: 18/10/2006, 14h47
  4. Delete + selection avec jointure
    Par kluh dans le forum Oracle
    Réponses: 4
    Dernier message: 15/11/2005, 10h44
  5. Problème performance SELECT avec jointure
    Par Netgamer dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/08/2005, 10h20

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