正如标题所暗示的那样,我想根据客户购买的基于meta关键字的图书来查找类似的图书。下面的查询是有效的,但我被告知这是可以简化的。
SELECT DISTINCT oth.book
FROM book_meta_keywords oth
INNER JOIN books b ON b.id = oth.book
, (SELECT bmk.meta_keyword AS metaKeyword, bmk.book AS book
FROM books b
INNER JOIN customers_books cvb ON cvb.book = b.id
INNER JOIN book_meta_keywords bmk ON bmk.book = b.id
WHERE cvb.customer = 1 ) AS allCustomerPurchasedBooksMeta
WHERE oth.meta_keyword = allCustomerPurchasedBooksMeta.metaKeyword
AND oth.book != allCustomerPurchasedBooksMeta.book
AND b.status = 'GOOD'表结构
book_meta_keywords
book meta_keyword
1 history
1 culture
2 culture
3 facts
books
id status
1 GOOD
1 GOOD
2 GOOD
3 GOOD
customers_books
book customer
1 90我应该得到输出书- 2。
希望我的表格数据对你有用,如果没有,请让我知道,很高兴纠正它。
更新
我现在正在使用下面的查询
SELECT bmk2.book
FROM customers_books cb
INNER JOIN book_meta_keywords bmk1
ON bmk1.book = cb.book
INNER JOIN book_meta_keywords bmk2
ON bmk2.meta_keyword = bmk1.meta_keyword
AND bmk2.book <> bmk1.book
INNER JOIN books b ON b.id = bmk2.book
WHERE cb.customer = 1 AND b.status = 'PUBLISHED'
GROUP BY bmk2.book
ORDER BY MAX(b.modified_date) DESC 此查询将返回
13
3
11但我预计只有3本,因为客户已经购买了13和11本书。
SELECT c.book FROM customers_books c WHERE c.customer = 1下面的DB字段中提供了完整的表结构和SQL。https://www.db-fiddle.com/f/tovUePp2WVffXLcuaxmJ8K/5
你认为问题出在哪里?我想这条线路AND bmk2.book <> bmk1.book不能工作。
发布于 2020-09-25 03:59:08
您可以使用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查询从customer 1购买的图书开始,然后带来相应的关键字,最后获得所有具有共同关键字的其他图书。
备注:
select distinctbook来获得想要的结果-如果出于某种原因需要,您可以使用多个join来实现
https://stackoverflow.com/questions/64053471
复制相似问题