首页 > 解决方案 > 内部加入,加入没有按预期工作

问题描述

我正在尝试根据客户已经购买的书籍为他推荐书籍。推荐基于书籍元关键字表。客户已经买了书1314我希望 sql 查询能够返回,因为这是唯一一本与其他 23本书有匹配元关键字的书。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

标签: sqlpostgresqlinner-join

解决方案


INNER JOIN不按预期工作。AND bmk2.book <> bmk1.book当它尝试将第 13 册和第 11 册作为 加入时变为真13<>11。并且客户可以在表中拥有不止一本书,customers_books这将在INNER JOIN

你需要NOT EXISTS如下:

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


推荐阅读