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

前端之家收集整理的这篇文章主要介绍了sql – 如何列出不存在的项目?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

标题可能有点令人困惑,让我解释一下,;)
我有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
原文链接:https://www.f2er.com/mysql/432938.html

猜你在找的MySQL相关文章