加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

sql – 如何列出不存在的项目?

发布时间:2020-12-11 23:50:55 所属栏目:MySql教程 来源:网络整理
导读:标题可能有点令人困惑,让我解释一下,;) 我有3张桌子: [names]n_id;name1;Jeff2;Adam[books]b_id;title1;Book12;Book2[read]n_id;b_id 表[read]是一本包含阅读书籍的表格. 如果Adam读“Book1”,[read]中的项目如下所示: 2;1 到现在为止还挺好. 现在,有没有

标题可能有点令人困惑,让我解释一下,;)
我有3张桌子:

[names]
n_id;name
1;Jeff
2;Adam

[books]
b_id;title
1;Book1
2;Book2

[read]
n_id;b_id

表[read]是一本包含阅读书籍的表格.
如果Adam读“Book1”,[read]中的项目如下所示:

2;1

到现在为止还挺好.
现在,有没有办法知道一个人没有读过哪些书?
我们知道只有亚当读了一本书“Book1”,所以查询应输出如下内容:

n_id;name;b_id;title
1;Jeff;1;Book1
1;Jeff;2;Book2
2;Adam;2;Book2

是可以在1个查询中执行此操作还是需要一些脚本? 最佳答案 您可以使用CROSS JOIN获取名称和书籍的所有可能组合,然后使用带有IS NULL的LEFT JOIN读取删除存在的行.

对于没有行存在的所有连接列,LEFT JOIN返回NULL,因此检查r.n_id IS NULL是否删除了连接实际在read中找到行的那些行.

SELECT n.n_id,n.name,b.b_id,b.title
FROM names n
CROSS JOIN books b
LEFT JOIN read r ON ( r.n_id = n.n_id AND r.b_id = b.b_id )
WHERE r.n_id IS NULL

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读