Vous pouvez le faire avec des jointures :
select bmk2.book
from customer_books cb
inner join book_meta_keyword bmk1
on bmk1.book = cb.book
inner join book_meta_keyword bmk2
on bmk2.meta_keyword = bmk1.meta_keyword
and bmk2.book <> bmk1.book
where cb.customer = 1
La requête commence par les livres achetés par le client 1, puis apporte les mots-clés correspondants, et enfin obtient tous les autres livres qui ont un mot-clé en commun.
Remarques :
-
S'il existe plusieurs mots clés correspondants dans les livres, vous obtiendrez un doublon dans le jeu de résultats. Dans ce cas, utilisez
select distinct
-
Vous n'avez pas besoin de table
book
pour obtenir le résultat souhaité - si nécessaire pour une raison quelconque, vous pouvez l'apporter avec une jointure supplémentaire