sql - 内部加入,加入没有按预期工作
问题描述
我正在尝试根据客户已经购买的书籍为他推荐书籍。推荐基于书籍元关键字表。客户已经买了书13
,14
我希望 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
解决方案
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)
推荐阅读
- hbase - 数据驻留在 HDFS(HFile) 上时的 HBase 读取性能如何
- react-native - React -native ScrollView 水平滚动冲突
- android - 应用程序关闭时,带有广播接收器的工作管理器不起作用
- c# - 如何修复 RpcException:项目 new-project 不存在或不包含活动的 Cloud Datastore 或 Cloud Firestore 数据库
- kubernetes - 如何定义一些具有特定端口的 Kubernetes Ingress 路由
- python - Python 3:优化 Project Euler 问题 #14
- python - 从basketball-reference.com解析NBA赛季统计数据,如何删除html评论标签
- reactjs - 如何将 firebase 的 firestore/admin sdk 与 next.js 一起使用
- c++ - 如何优化这些正则表达式?
- vue.js - 如何使用 ESM 导入 Vue Material (Webpack UMD)?