首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Inner Join,Join on不能按预期工作

Inner Join,Join on不能按预期工作
EN

Stack Overflow用户
提问于 2020-12-30 18:33:58
回答 1查看 37关注 0票数 0

我正在努力为客户找到推荐的书籍,根据他已经购买的书籍。推荐基于图书元关键字表。客户已经购买了图书1314,我希望sql查询返回3,因为这是唯一一本与其他2本图书具有匹配a元关键字的图书。

要查看客户购买的图书,您可以运行以下查询,返回13,11 SELECT c.book FROM customers_books c WHERE c.customer = 1

我认为这行AND bmk2.book <> bmk1.book没有像预期的那样工作。

请在这里查看我的示例sql。https://www.db-fiddle.com/f/tovUePp2WVffXLcuaxmJ8K/5

EN

回答 1

Stack Overflow用户

发布于 2020-12-30 18:45:16

INNER JOIN的工作方式与您的预期不符。当它试图以13<>11的身份加入第13册和第11册时,AND bmk2.book <> bmk1.book就变成了真的。客户在customers_books表中可以有多本书,这将在INNER JOIN中创建问题

您需要NOT EXISTS,如下所示:

代码语言:javascript
复制
SELECT distinct 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
 INNER JOIN books b ON b.id = bmk2.book
 WHERE cb.customer = 1 AND b.status = 'PUBLISHED'
 AND NOT EXISTS (SELECT 1 FROM customers_books cbb
                where cbb.book = bmk2.book
                  and cbb.customer = cb.customer)

SQLFiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65505541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档