Tu commences par extraire toutes les combinaisons "family" - "keyword" possibles, comme tu l'as fait, en joignant les deux tables:
 
Code :
 - SELECT
 -   family.name,
 -   keyword.word
 - FROM
 -   family,
 -   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 :
 - 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 :
 - IF(ISNULL(assoc.id_family),'no','yes')
 
  | 
 
Ce qui donne, récomposé:
 
Code :
 - SELECT
 -   keyword.word,
 -   family.name,
 -   IF(ISNULL(assoc.id_keyword),'no','yes') AS link
 - FROM
 -   keyword,
 -   family
 - LEFT JOIN assoc ON assoc.id_keyword = keyword.id AND assoc.id_family = family.id
 
  |