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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  aide requête SQL : jointure tables 0-n

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

aide requête SQL : jointure tables 0-n

n°1922195
ZeBix
edit > preview
Posté le 08-09-2009 à 14:14:39  profilanswer
 

Bonjour à tous,
 
Voilà un petit temps que je n'ai plus fait de SQL et je cale sur une bêtise.
 
J'ai deux tables en relation 0-n :  
 
Table1 :  ID , label -- primary key ID
Table2 : Num, label, ref_ID -- primary key Num; ref_ID est foreign key vers Table1.
 
Les ID ne Table1 ne se retrouvent parfois pas dans Table2, et parfois plusieurs fois.
 
Je voudrais juste parcourir la Table1 et voir pour chaque row, si cet ID est repris dans Table2.ref_ID. Je ne veux que 1 row de résultat par row de Table1
 
Exemple de tables :  
Table1 :  
1, mylabel
2, monlabel
3, milabel
4, mijnlabel
 
Table2 :  
1, blabla, 1
2, blabla, 3
3, blabli, 3
 
Je voudrais une requête qui me sorte :  
1, mylabel, true
2, monlabel, false
3, milabel, true
4, mijnlabel, false
 
les "true" et "false" peuvent être les ID, les Num ou n'importe quoi comme valeur, mais je voudrais juste que je puisse , sur un et un seul row, savoir si l'ID se retrouve dans l'autre table.
 
-> Si je fais un INNER JOIN, je n'aurai QUE les IDs se retrouvent dans Table2.
-> Si je fais un LEFT OUTER JOIN, j'aurai autant de rows par Table1.ID qu'il y a de ce même ID dans Table2.ref_ID
 
Je suis persuadé qu'il doit y avoir un truc facile pour obtenir le résultat recherché ... un tuyau ?

mood
Publicité
Posté le 08-09-2009 à 14:14:39  profilanswer
 

n°1922209
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-09-2009 à 15:19:25  profilanswer
 

tu utilises quel SGBD ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°1922221
ZeBix
edit > preview
Posté le 08-09-2009 à 15:36:53  profilanswer
 

MySQL 5, mais je pense que sur le serveur de prod c'est encore du 4  ... je peux procéder à l'upgrade si nécessaire, cela dit ..  (vieil hébergement mutualisé chez OVH tout ça ..)

n°1922232
casimimir
Posté le 08-09-2009 à 15:50:41  profilanswer
 

ben tu fais un left outer join, un group by sur ton label de ta table de 1, et un count(b.blabla) te renverras 0 pour les lignes sans correspondance et un nombre pour ceux avec correspondance.

n°1922240
ZeBix
edit > preview
Posté le 08-09-2009 à 16:16:18  profilanswer
 

casimimir a écrit :

ben tu fais un left outer join, un group by sur ton label de ta table de 1


 
Merci pour la proposition! Comme tu t'en doutes, les labels peuvent être différents (j'ai réduit l'exemple à son minimum) donc exclu de faire un groupe by dessus.
 
J'essaye donc un group by sur les ID_ref , mais le résultat final, malgré le LEFT OUTER JOIN, ne donne que les rows de Table1 qui ont effectivement un ID présent dans Table2. ...  :cry:  en bref le group by n'aime pas les valeurs nulles, c'est-à-dire typiquement ce que retourne le LEFT OUTER JOIN quand il ne trouve rien dans l'autre table...


Message édité par ZeBix le 08-09-2009 à 16:23:56
n°1922304
hoppus666d​tc
Gigateuf Wayne ! Megateuf Gart
Posté le 08-09-2009 à 17:39:55  profilanswer
 

Je te fais une requête sans Access devant le nez, possible qu'il y'ait une ou 2 erreurs, et je sais même pas si ça marche ^^
 
Select ID , label, iif((Select Count(Num) From Table2 where Table2.ref_ID = t.ID)=0, False,True) From Table1 t

n°1922369
xplo
Posté le 08-09-2009 à 22:59:58  profilanswer
 

je ne comprend pas pkoi left join/group by ne marcherai pas :
 
SELECT t1.*,COUNT(t2.num)  
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.id=t2.ref_id
GROUP BY t1.id
 
peux etre la synthaxe n est pas bonne :x
 

n°1922374
mrbebert
Posté le 08-09-2009 à 23:19:50  profilanswer
 

xplo a écrit :

je ne comprend pas pkoi left join/group by ne marcherai pas :
 
SELECT t1.*,COUNT(t2.num)  
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.id=t2.ref_id
GROUP BY t1.id
 
peux etre la synthaxe n est pas bonne :x
 

Par contre, j'ai peur que le résultat soit pas joli pour les lignes où on n'a pas le t2.num (COUNT(NULL), ca donne quoi :??: )
Peut être encadrer ca par un IFNULL -> IFNULL(COUNT(t2.num), 0) ? [:figti]  

n°1922405
casimimir
Posté le 09-09-2009 à 08:18:46  profilanswer
 

count(null) retourne 0 (en tout cas en oracle) -> c'est joli


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

  aide requête SQL : jointure tables 0-n

 

Sujets relatifs
Gestion fichiers SQL Server 2005Simplification de requête
Probleme de requete SELECT sur msSQLRequete dans une boucle, danger ?
Requete pour faire un classement : lenteur !Problème import données dans table liée SQL sous Access
[VBA] Besoin d'aide pour macroTrouver un l'indicatif le plus proche en SQL
[PHP] injection sql (MS SQL)Erreur de syntaxe SQL. Help !
Plus de sujets relatifs à : aide requête SQL : jointure tables 0-n


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