Du kan gøre dette med joins:
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
Forespørgslen starter fra bøger, som kunde 1 har købt, medbring derefter de tilsvarende søgeord, og til sidst får du alle andre bøger, der har et søgeord til fælles.
Bemærkninger:
-
Hvis der er flere matchende søgeord på tværs af bøger, vil du få duplikat i resultatsættet. I så fald skal du bruge
select distinct
-
Du behøver ikke tabellen
book
for at få det resultat, du ønsker - hvis det af en eller anden grund er nødvendigt, kan du medbringe det med et join mere