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 :

Question sur les jointures


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 287
    Points : 91
    Points
    91
    Par défaut Question sur les jointures
    Bonjour,

    A partir de 2 tables (une table d'élément et une table de liens), je cherche le moyen d'obtenir une liste contenant tous les éléments d'un type (type1) et leur lien avec un autre type (type2), et les éléments (de type1) ne disposant pas de liens (avec les élément de type2).

    La table des éléments contient des éléments de types différents identifiés par le champs "TYPE"
    La table des liens permet d'associer les éléments entre eux quelque soit leur type. Et bien sûr un élément d'un type peut être lié à plusieurs autres éléments de type différents.

    J'ai fait une requête du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select * 
    from table_element T0
    left join table_lien T1 on (T0.id = T1.id1) or (T0.id = T1.id2) 
    left join table_element T2 on (T1.id1=T2.id) or (T1.id2 = T2.id)
    where T0.type = type1
    and (T2.type = type2 or T2.type is null)
    La requete fonctionne bien, sauf si un élément de type1 est lié à un autre élément de type quelconque mais pas à un élément de type2 (il n'apparait pas dans le résultat)

    Je ne vois pas comment faire ma requete pour ne faire un test de lien et de non lien avec seulement le élément d'un type spécifé sans m'occuper des autres type d'éléments.

    Merci de votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 565
    Points
    52 565
    Billets dans le blog
    5
    Par défaut
    Auriez vous l'aimabilité de poster le DDL de vos tables ainsi qu'un jeu de données et un exemple de la réponse attendu afin de clarifier votre problème et le rendre reproductible ?

    En ce faisant, vous vous rendrez conforme à l'esprit de ce conseil préalable :
    http://www.developpez.net/forums/showthread.php?t=944

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 287
    Points : 91
    Points
    91
    Par défaut
    Oui effectivement.

    DDL table element
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE ELEMENT (
        ID                INTEGER NOT NULL,
        TYPE_ID           SMALLINT NOT NULL,
        CODE              VARCHAR(255) DEFAULT "" NOT NULL,
    );
    DDL table des liens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE LINK (
       ID                INTEGER NOT NULL,
        ELEM1_ID  INTEGER NOT NULL,
        ELEM2_ID  INTEGER NOT NULL,
    );
    contenu element
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    id     type
    1      typeA
    2      typeA
    3      typeB
    4      typeC
    Contenu links
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    id    elem1    elem2
    1     1          4
    2     2          3
    resultat recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    elem1    elem2
    1          <null>
    2          3
    resultat obtenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    elem1    elem2
    1          4
    2          3

Discussions similaires

  1. Question sur les jointures
    Par Nikimizi dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/06/2013, 12h22
  2. Question sur les jointures en cas d'héritage
    Par Kropernic dans le forum Développement
    Réponses: 4
    Dernier message: 22/10/2012, 15h31
  3. Question sur les jointures
    Par elraphi dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/03/2010, 13h20
  4. Question sur les jointures
    Par dimitri13 dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/04/2009, 11h28
  5. Question sur les jointures
    Par neufgirl dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/02/2009, 17h30

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