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

MS SQL Server Discussion :

Requête plusieurs tables NULL


Sujet :

MS SQL Server

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 242
    Par défaut Requête plusieurs tables NULL
    Bonjour,

    Je suis entrain d'écrire une requête, cependant je rencontre un probleme lorsqu'un ID est NULL

    Explication :



    Il arrive que dans Table1-> idresponsable soit Null.

    Par conséquent je souhaiterais connaitre tous les équipements avec les responsables ( qu'il en existe ou non )

    Par exemple :

    select t1.equipement, t2.nom FROM table1 t1, table2 t2 WHERE t1.idresponsable = t2.idresponsable

    Ce select me renvoit que les équipements ayant un responsable mais pas les autres.

    Existe-il une solution pour obtenir tous les équipements ( avec ou sans responsable ) ?
    Merci beaucoup pour votre aide
    Cordialement

  2. #2
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Il faut regarder du côté des jointures externes (LEFT ou RIGHT OUTER JOIN).
    Tu auras de bonnes explications ici.

  3. #3
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Bonjour,

    Il faut faire une jointure à droite (ou à gauche) dans ce cas là.
    Je suis loin d'être experte sur les jointures à droite (ou à gauche), mais je me lance quand même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT t1.equipement, t2.nom
    FROM table2 t2 RIGHT JOIN table1 t1 ON t1.idresponsable = t2.idresponsable
    Cordialement,

    Arkhena

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 242
    Par défaut
    Ok merci beaucoup à vous 2 pour votre coup de pouce, je vais voir ce que je peux faire car avec le left et right pour l'instant je n'ai rien comprisss....
    Merci
    A bientot

  5. #5
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    La commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select table1.code, table2.nom
    from
    table1 
    LEFT OUTER JOIN table2
    ON Table1.Id = table2.Id
    te permet de ramener pour chaque ligne, le code de la table1 et le nom de la table2 s'il existe, sinon il met un NULL en face du code de la table1.
    C'est une jointure non filtrante sur le nombre de ligne.
    En faisant une jointure simple (comme ce que tu fais actuellement), le moteur ne restitue que les lignes entière qui peuvent être mise en correspondance entre les 2 tables.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 242
    Par défaut
    Ok merci j'ai bien réussi à me faire lister même avec le null...
    Cependant je remarque que ce n'etait pas le plus grosse difficulté en effet, il n'y a pas que cette table il y en a pleins d'autres liées. Avec les Equi Unions il n'y a pas de probleme maintenant pour fusionner les 2... et même plus encore.

    SELECT t1.code,t2.nom
    FROM Table1 t1
    LEFT OUTER JOIN table2 t2
    ON t1.id = t2.id

    Cela fonctionne

    Mais ce que j'ai voici le schéma,



    (Vous allez me dire je demande toujours, je le conçois mais je cherche, j'effectue des tests et tourne en rond....)

    Voici ci-dessus, un peu plus la realité mais avec encore Beaucoup PLUS de table...

    Dans MaTable1, Idreponsable et IdLieux peuvent etre NULL.
    Dans Matable4, idmarque est toujours renseingé il y a un Equi Union ( terme que j'ai pu lire sur le web ), les equi union il n'y a pas de problème, j'arrive correctement.

    Le but serait de récupérer tous les équipements avec leur responsable, lieu, et marque, si vide ( pour Idreponsable et IdLieux ) on affiche tout de même l'équipement.

    Lorsqu'il y a Equi Union on utilise la Where t1.id = t2.id AND....

    Mais avec "LEFT OUTER JOIN" comment faire, ou faut il mettre le where ?
    Par exemple, je sais que pour la marque il n'y a pas de probleme.

    Select * FROM MaTable1 t1, MaTable4 t4 WHERE t1.idmarque=t1.idmarque


    Dans

    SELECT t1.code,t2.nom
    FROM Table1 t1
    LEFT OUTER JOIN table2 t2
    ON t1.id = t2.id

    Où dois je mettre

    Select * FROM MaTable1 t1, MaTable4 t4 WHERE t1.idmarque=t1.idmarque

    Merci vraiment pour votre aide, je vous en serrais très reconnaissant.

  7. #7
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Il suffit de recommencer avec le left outer join.
    Ça donnerai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    select
    t1.Equipement
    , t2.nom AS NomResponsable
    , t3.lieux
    , t4.marque
    from 
    	MaTable1 t1
    	LEFT OUTER JOIN MaTable2 t2
    		ON t1.idresponsable = t2.idresponsable
    	LEFT OUTER JOIN MaTable3 t3
    		ON t1.idlieux = t3.idlieux
    	LEFT OUTER JOIN MaTable4 t4
    		ON t1.idmarque = t4.idmarque
    Bonne utilisation.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 242
    Par défaut
    Merci je vais tester ceci demain, je te tiens au courant
    A plus

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 242
    Par défaut
    Génial....
    J'ai réussi à tout faire comme je voulais...
    Merci à vous tous....

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

Discussions similaires

  1. [AC-2010] Requête plusieurs tables vides
    Par AidezMoiSvp dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/03/2013, 17h26
  2. Edition sur requêtes à plusieurs tables
    Par Gabrieel dans le forum Access
    Réponses: 5
    Dernier message: 13/06/2006, 18h11
  3. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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