Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1606 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Question sur les jointures

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question sur les jointures

n°1378043
prat038
Posté le 31-05-2006 à 12:29:02  profilanswer
 

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 :

Code :
  1. select *
  2. from table_element T0
  3. left join table_lien T1 on (T0.id = T1.id1) or (T0.id = T1.id2)
  4. left join table_element T2 on (T1.id1=T2.id) or (T1.id2 = T2.id)
  5. where T0.type = type1
  6. 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.

mood
Publicité
Posté le 31-05-2006 à 12:29:02  profilanswer
 

n°1379314
polo021
Posté le 01-06-2006 à 22:15:29  profilanswer
 

salut, j'ai regardé un peu et voici ce que je propose (ca n'a pas été testé)
 
 [:sharpknife]  

Code :
  1. select * from table_element e1
  2. where e1.type = type1
  3. and exists (select * from table_lien lien1
  4.                 where e1.id = lien1.id1
  5.                    and exists (select * from table_element e2
  6.                                    where lien1.id2 = e2.id
  7.                                        and e2.type = type2
  8.                                   )
  9.                 )
  10. union
  11. select * from table_element e3
  12. where e3.type = type1
  13. and NOT exists (select * from table_lien lien2
  14.                 where e3.id = lien2.id1
  15.                    and exists (select * from table_element e4
  16.                                    where lien2.id2 = e4.id
  17.                                        and e4.type = type2
  18.                                   )
  19.                 )


 
voila
 [:fast]  
ce fut un plaisir, j'espere que ca marche pcq l'enoncé n'est pas super super comprehensible.
 
edit : heureuseùment que je me suis relu plusieurs fois, j'avais oublié le "NOT" exists


Message édité par polo021 le 01-06-2006 à 22:19:30
n°1388689
prat038
Posté le 16-06-2006 à 10:15:56  profilanswer
 

Salut,
 
Désolé d'avoir été impoli et de ne pas avoir répondu plus tôt, Mais j'ai été pros par d'autres trucs plus urgents.
 
Donc déjà merci de d'être penché sur mon problème.
 
Je vais essayé ton truc. Sinon il pourrai y avoir une autre solution qui sera d'ajouté une clause de vérification du type dans un premier inner join.
Je fais les tests et je te tiens au courant.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Question sur les jointures

 

Sujets relatifs
Question très simple sur la Javadoc[HTACCESS] Question...
question sur forumPetite question sur les tris de tableau
question Javamicrosoft question et .net
Question de noob sur gotoAndPlay()Une question sur la météo !
Excel : Question élementairequestion deboggage/eclipse
Plus de sujets relatifs à : Question sur les jointures


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR