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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Raaah le SQL... Probleme de jointure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Raaah le SQL... Probleme de jointure

n°1097862
Friday Mon​day
Trop de hérissons écrasés...
Posté le 26-05-2005 à 12:29:07  profilanswer
 

Salut tout le monde,  
 
Les sql est ma bête noire, j'ai un problème élémentaire que je n'arrive pas à résoudre :
J'ai (en écriture abrégée) :
* une table contenant des mots : keyword (id int, word varchar)
* une table de familles de mots : family (id int, name varchar)
* une table d'assoc entre les 2 : assoc (id_family int, id_keyword int)
 
Je veux pouvoir récuperer un résultat avec toutes les combinaisons (mot , famille) et une valeur (quelconque, je m'en fous NULL/pas NULL) m'indiquant qu'il y a un lien dans la table d'association.
 
Si je fais une jointure :

Code :
  1. select name, f.id, word, w.id from family f left outer join keyword w on 1=1;

(oui je sais le 1=1 est très très con c'est en attendant de trouver la condition apropriée)
J'ai toutes les combinaisons mais sans l'indication de l'association.
 
Si je fais un select sur assoc, j'aurais toutes les associations mais sans faire toutes les combinaisons.
 
Question : comment faire ça une seule requete, je suis sûr que c'est hyper-simple mais plus j'étudie SQL moins je comprends ce langage. Question plus générale : comment on raisonne en SQL ?
 
PS : je suis sous MySQL donc on oublie les requetes imbriquées.
 
Par avance merci


---------------
Friedrich Nietzsche : Le christianisme et l'alcool, les deux plus grands agents de corruption
mood
Publicité
Posté le 26-05-2005 à 12:29:07  profilanswer
 

n°1098379
jeff@be
Posté le 26-05-2005 à 17:04:39  profilanswer
 

Tu commences par extraire toutes les combinaisons "family" - "keyword" possibles, comme tu l'as fait, en joignant les deux tables:
 

Code :
  1. SELECT
  2.   family.name,
  3.   keyword.word
  4. FROM
  5.   family,
  6.   keyword


 
Tu auras donc un résultat contenant (nombre d'enregistrements de "family" ) * (nombre d'enregistrements de "keyword" ).
 
Ensuite, tu ajoutes ta table "assoc", mais tu t'en fous de savoir si oui ou non il y a un résultat dans la table de droite correspondant à la table de gauche. C'est ça un "LEFT JOIN".
Le résultat que tu veux obtenir dépend de l'existence simultanée dans "assoc" de "id_family" ET "id_keyword", donc ta jointure se fera comme ceci:
 

Code :
  1. LEFT JOIN assoc ON assoc.id_family = family.id AND assoc.id_keyword = keyword.id


 
Tu ajoutes donc une colonne, montrant si oui ou non la jointure donne un résultat, faisant un test sur le NULL, qui est la valeur retournée s'il n'y a pas de résultat.
Soit:
 

Code :
  1. IF(ISNULL(assoc.id_family),'no','yes')


 
Ce qui donne, récomposé:
 

Code :
  1. SELECT
  2.   keyword.word,
  3.   family.name,
  4.   IF(ISNULL(assoc.id_keyword),'no','yes') AS link
  5. FROM
  6.   keyword,
  7.   family
  8. LEFT JOIN assoc ON assoc.id_keyword = keyword.id AND assoc.id_family = family.id

n°1099980
Friday Mon​day
Trop de hérissons écrasés...
Posté le 27-05-2005 à 19:01:20  profilanswer
 

Merci beaucoup Jeff@be, ton aide m'a été précieuse :jap:
 
Ca marche nickel et j'ai compris comment construire ce type de requete.
 
Merci


---------------
Friedrich Nietzsche : Le christianisme et l'alcool, les deux plus grands agents de corruption

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

  Raaah le SQL... Probleme de jointure

 

Sujets relatifs
probleme avec sscanf ...Probleme avec recuperation de Fichier ZIP
Probleme sur les sessions PHP[Résolu]probleme de requete sql
Problème de tableauProbleme timer
Probleme liste deroulante[VB.NET][SQL]sous requetes
problème VBA Access : "Procédure trop grande"[CSS] Problème de longeur de <DIV>
Plus de sujets relatifs à : Raaah le SQL... Probleme de jointure


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