gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:06:45 25 4
gpt4 key购买 nike

标题可能有点困惑,让我解释一下,;)我有 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

到目前为止,还不错。现在,有没有办法知道一个人没有读过哪些书?我们知道只有 Adam 读过一本书“Book1”,所以查询应该输出如下内容:

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

是否可以在 1 个查询中执行此操作,还是我需要一些脚本?

最佳答案

您可以使用 CROSS JOIN获取所有可能的 namesbooks 组合,然后使用 LEFT JOINread 上使用 IS NULL 删除那里存在的行。

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

关于sql - 如何列出不存在的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com