Je kunt dit doen met 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
De zoekopdracht begint bij boeken die klant 1 heeft gekocht, brengt vervolgens de bijbehorende zoekwoorden en krijgt uiteindelijk alle andere boeken die een willekeurig zoekwoord gemeen hebben.
Opmerkingen:
-
Als er meerdere overeenkomende zoekwoorden in boeken zijn, krijgt u duplicaat in de resultatenset. Gebruik in dat geval
select distinct
-
Je hebt geen tabel
book
nodig om het gewenste resultaat te krijgen - als dat om de een of andere reden nodig is, kun je het met nog een keer meedoen