Du kan göra detta 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
Frågan startar från böcker som kund 1 köpte, ta sedan med motsvarande sökord och får slutligen alla andra böcker som har något gemensamt sökord.
Anmärkningar:
-
Om det finns flera matchande sökord i böckerna får du dubbletter i resultatuppsättningen. Använd i så fall
select distinct
-
Du behöver inte tabell
book
för att få det resultat du vill ha - om det behövs av någon anledning kan du ta med det med ytterligare en join