Raaah le SQL... Probleme de jointure - SQL/NoSQL - Programmation
Marsh Posté le 26-05-2005 à 17:04:39
Tu commences par extraire toutes les combinaisons "family" - "keyword" possibles, comme tu l'as fait, en joignant les deux tables:
Code :
|
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 :
|
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 :
|
Ce qui donne, récomposé:
Code :
|
Marsh Posté le 27-05-2005 à 19:01:20
Merci beaucoup Jeff@be, ton aide m'a été précieuse
Ca marche nickel et j'ai compris comment construire ce type de requete.
Merci
Marsh Posté le 26-05-2005 à 12:29:07
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 :
(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