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 double sur une table + cas ou pas de jointure.


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 42
    Points
    42
    Par défaut Jointure double sur une table + cas ou pas de jointure.
    Bonjour à tous,

    Je sèche sur une requête que je veux écrire :

    Soit les tables T1 et T2 :

    T1 :
    tid
    tname
    T2a -> T2id
    T2b -> T2 id

    T2:
    t2id
    t2KEY

    Je souhaite récupérer toutes les lignes de T1 quand T2a.t2KEY OU T2b.t2KEY = 4 par exemple.


    Seulement, si T2a OU T2b est NULL je veux la ligne, mais je ne la veux pas si c'est renseigné et que la clé ne matche pas avec la valeur donnée ( ici 4).

    Sans que vous me donniez une requête : est-ce déjà possible ?

    Le problème est que au mieux, je peux ne récupérer que les valeurs qui ont une correspondance dans T2a ou T2b, mais passent à la trappe tous les cas où c'est nul.

    Au contraire si je choisis un left join, je récupère toutes les lignes sans aucun filtrage.

    Le but étant de filtrer T1 en fonction de ses champs T2 si ils sont remplis,

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 220
    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 220
    Points : 28 201
    Points
    28 201
    Par défaut
    Résumons :
    Tu veux toutes les lignes de T1 pour
    - T2a = 4 quelque soit T2b
    - T2b = 4 quelque soit T2a
    - T2a = null et T2b = null
    Tu ne veux pas les lignes de T1 pour
    - T2a et T2b <> 4 sauf donc si T2a et T2b = null

    Pour moi c'est un left join qu'il faut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T1.* FROM T1
    LEFT OUTER JOIN T2 t2_1 ON T1.t2a=t2_1.t2id
    LEFT OUTER JOIN T2 t2_2 ON T1.t2b=t2_2.t2id
    WHERE t2_1.t2KEY = 4 OR t2_2.t2KEY = 4 OR (T1.t2a = NULL AND T1.t2b = NULL)

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 44
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Je propose une variante avec des semi jointures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    select
           T1.tid
          ,T1.tname
          ,T1.T2a
          ,T1.T2b
      from T1
     where (    T1.T2a is not null
            and exists (select 1
                          from T2
                         where T2.t2id = T1.T2a
                           and T2.T2Key= 4
                       )
        or (    T1.T2b is not null
            and exists (select 1
                          from T2
                         where T2.t2id = T1.T2b
                           and T2.T2Key= 4
                       )
    Cdlt,
    OD

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 42
    Points
    42
    Par défaut
    Merci beaucoup ! Je ne demandais pas autant ....

    J'ai essayer des trucs compliqué avec des UNION de jointures, effectivement ya plus simple.

    EDIT : Merci c'est exactement ce qu'il me fallait...

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

Discussions similaires

  1. Jointures multiples sur une table
    Par allstar dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/11/2012, 11h48
  2. Double jointure externe sur une table
    Par astridette dans le forum SQL
    Réponses: 2
    Dernier message: 30/03/2012, 13h33
  3. Update sur une table ne marche pas
    Par haskouse dans le forum Développement de jobs
    Réponses: 6
    Dernier message: 30/07/2010, 10h59
  4. Recherche sur une table ne fonctionne pas
    Par runcafre91 dans le forum Langage
    Réponses: 2
    Dernier message: 07/03/2010, 10h32
  5. Jointures externes sur une table de jointure
    Par mart1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/10/2006, 01h33

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