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

Requêtes MySQL Discussion :

LEFT OUTER JOIN


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut LEFT OUTER JOIN
    Bonjour,

    j'ai 2 tables :
    1. "technique" composée des champs "id_technique" et "libelle_technique"
    2. "fiche" composée des champs "id_fiche", "date_travaux", "id_technique" et "siren"


    j'essaie de récupérer toutes les lignes de la table "technique", y compris celles qui n'ont pas de correspondance dans la table "fiche", d'où l'utilisation de la jointure externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT t.libelle_technique,
             fs.id_smdt,
             fs.siren,
             fs.date_travaux
        FROM techniques t LEFT OUTER JOIN fiche_smdt fs
                ON t.id_technique = fs.id_technique
       WHERE    fs.date_travaux = '2010-01'
    ORDER BY t.libelle_technique
    le résultat est en pièce jointe (résultats left outer join sans siren.xls)

    ça coince quand je veux mettre une condition sur le siren, comme ceci (voir le 2ème fichier en pièce jointe):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT t.libelle_technique,
             fs.id_smdt,
             fs.siren,
             fs.date_travaux
        FROM techniques t LEFT OUTER JOIN fiche_smdt fs
                ON t.id_technique = fs.id_technique
       WHERE    fs.date_travaux = '2010-01'
             AND (fs.siren = '523454567' OR fs.siren IS NULL)
    ORDER BY t.libelle_technique
    (je me suis inspirée de http://sqlpro.developpez.com/cours/sqlaz/jointures/)
    je ne me retrouve plus qu'avec les lignes où siren=523454567, donc je n'ai plus tous les noms de technique, alors que c'est ce que j'aimerais : toutes les techniques, même si aucune fiche avec le siren 523454567 ne correspond.

    Qui peut m'aider ?

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    salut,

    Je ne comprends pas ta 1ère requête
    avec ta clause where, il y aura forcément une liaison avec la table fiche. Donc pour moi, c'est à ce niveau qu'il y a un problème

    il faudrait l'écrire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT t.libelle_technique,
             fs.id_smdt,
             fs.siren,
             fs.date_travaux
        FROM techniques t LEFT OUTER JOIN fiche_smdt fs
                ON t.id_technique = fs.id_technique
       WHERE    fs.date_travaux = '2010-01' or fs.date_travaux is null
    ORDER BY t.libelle_technique
    ou comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT t.libelle_technique,
             fs.id_smdt,
             fs.siren,
             fs.date_travaux
        FROM techniques t LEFT OUTER JOIN fiche_smdt fs
                ON t.id_technique = fs.id_technique
                AND fs.date_travaux = '2010-01'
    ORDER BY t.libelle_technique

  3. #3
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut

    OK merci, en fait avec ta 2ème proposition, j'arrive à avoir toutes les techniques en mettant une condition sur le siren :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT t.libelle_technique,
             fs.id_smdt,
             fs.siren,
             fs.date_travaux
        FROM techniques t LEFT OUTER JOIN fiche_smdt fs
                ON t.id_technique = fs.id_technique
                AND fs.date_travaux = '2010-01' AND fs.siren = '523454567'
    ORDER BY t.libelle_technique

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

Discussions similaires

  1. Probleme de NULL avec LEFT OUTER JOIN
    Par jiluc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/01/2006, 14h42
  2. Bug LEFT OUTER JOIN Firebird
    Par Fabio2000 dans le forum SQL
    Réponses: 3
    Dernier message: 21/11/2005, 09h08
  3. Problème avec left outer join
    Par jgfa9 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/08/2005, 21h07
  4. Problème de performance avec LEFT OUTER JOIN
    Par jgfa9 dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/07/2005, 13h17
  5. concatenation de chaine dans un left outer join
    Par the_edge dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/11/2004, 16h08

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