sql - 如何在包括 NULL 在内的多对多关系中使用 NOT IN 进行查询
问题描述
鉴于我有 3 个表,我需要检索与特定记录没有关系的所有行,并包括零关系的行,我该如何构建这个查询?
SELECT id, name FROM books;
id | name
---------------------------
B1 | the book
B2 | super book
B3 | another great book
B4 | how to be a book
SELECT id, name FROM authors;
id | name
---------------------------
A1 | Huey
A2 | Dewey
A3 | Louie
A4 | Donald
SELECT "bookId", "authorId" FROM books_authors;
bookId | authorId
---------------------------+---------------------------
B1 | A1
B3 | A2
B4 | A2
B4 | A4
-- Book B2 has no author
-- Book B4 has 2 authors
我需要所有作者杜威(id = A2)根本没有关系的书。
因为 B4 与作者杜威 (A2) 有关系,所以不应返回。
查询应该只返回 B1 和 B2。
解决方案
SELECT * FROM books
WHERE id NOT IN
(SELECT bookid FROM books_authors WHERE authorid = 'A2')
推荐阅读
- lua - Lua C API:如何获取函数名?
- javascript - json函数不将值传递给控制器
- android - 在android中实现NotificationListenerService
- shell - 解析和修改文件内容
- sql - APEX 5 如何为单独的行中的每个值写入选定的复选框?
- html - DOMPDF:两个高度大于页面高度的内联块。第二块从新页面问题开始
- rabbitmq - RabbitMQ java 客户端无法与 TLS 连接
- python - 尝试将值从 datfiles 导出到 csv
- python - 检查CSV的最后时间是否是当前时间或不使用Pandas Python3
- amcharts - AmCharts V4 (Maps) 放大地图会在两个轴上创建滚动条(仅限 IE)