Możesz to zrobić za pomocą złączeń:
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
Zapytanie zaczyna się od książek, które kupił klient 1, następnie przywołuje odpowiednie słowa kluczowe, a na końcu otrzymuje wszystkie inne książki, które mają jakieś wspólne słowo kluczowe.
Uwagi:
-
Jeśli w książkach jest kilka pasujących słów kluczowych, w zestawie wyników otrzymasz duplikat. W takim przypadku użyj
select distinct
-
Nie potrzebujesz tabeli
book
aby uzyskać pożądany rezultat - jeśli z jakiegoś powodu jest to konieczne, możesz to zrobić z jeszcze jednym dołączeniem