Puedes hacer esto con uniones:
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
La consulta comienza con los libros que compró el cliente 1, luego trae las palabras clave correspondientes y, finalmente, obtiene todos los demás libros que tienen alguna palabra clave en común.
Notas:
-
Si hay varias palabras clave coincidentes en los libros, obtendrá un duplicado en el conjunto de resultados. En ese caso, use
select distinct
-
No necesitas tabla
book
para obtener el resultado que desea; si es necesario por alguna razón, puede traerlo con una combinación más