在查找与其他表具有 m:n 关系并因此在链接表中多次出现的记录时,我遇到了一个小问题。我尝试在这里用一个最小的例子来展示它:
假设我们有一个名为“books”的表,一个名为“authors”的表和一个连接两者的链接表。
有些书由一位作者撰写,有些则由多位作者撰写。
正如我们所见,第一本书 (book_id = 1) 仅由一个人 (authorID = 1) 撰写,而第二本书 (book_id = 2) 由两个人 (authorID 1 和 3) 撰写。如果我们现在尝试获取作者 1 和作者 3 所写的书,我们可以这样进行:
SELECT book_id, title, year_of_publication, pagecount, cover FROM (book
INNER JOIN
(SELECT * FROM link_author_book WHERE author = 1) AS author1
ON author1.book = book.book_id)
INNER JOIN
(SELECT * FROM link_author_book WHERE author = 3) AS author2
ON author2.book = book.book_id
我很确定我的解决方案不是最好的方法,但在这种情况下它是有效的......无论如何,当我们试图只返回作者 1 而没有其他人写的那些书时,我们有一个问题。在代码中,此选择如下所示:
SELECT book_id, title, year_of_publication, pagecount, cover FROM book
INNER JOIN
link_author_book ON link_author_book.book = book.book_id
WHERE author = 1;
并导致此记录集:
虽然从技术上讲 authorID = 1 是这两本书的作者,但我真正想要的只是第一本书 (book_id = 1)。所以这是我的问题:如何排除在这种 m:n 关系中链接到的查询值多于查询值的记录?以及如何在 Access 2016 中将其作为 SQL 语句完成?提前致谢