Можете да направите това с обединения:
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
Заявката започва от книгите, закупени от клиент 1, след това въвежда съответните ключови думи и накрая получава всички други книги, които имат обща ключова дума.
Бележки:
-
Ако има няколко съвпадащи ключови думи в книгите, тогава ще получите дубликат в набора с резултати. В такъв случай използвайте
select distinct
-
Нямате нужда от таблица
book
за да получите резултата, който искате - ако е необходимо по някаква причина, можете да го донесете с още едно присъединяване