与大多数数据库一样,在Access中我可以使用JOIN来查询多对多关系:
SELECT Books.Title, Tags.Subject
FROM Tags
RIGHT JOIN (Books
LEFT JOIN BookTags
ON Books.ID = BookTags.BookID)
ON Tags.ID = BookTags.TagID;
-------Books.Title--------------+---Tags.Subject-------
Nineteen Eighty Four | science fiction
Nineteen Eighty Four | dystopian themes
Freakonomics | non-fiction
Freakonomics | economics
The C Programming Language | textbook
The C Programming Language | programming
The C Programming Language | non-fiction
我想要一个只列出一次每本独特书籍的表格,该书的所有作者都在同一行。像这样:
一九八四年 - 科幻小说,反乌托邦主题
魔鬼经济学 - 非小说,经济学
C编程语言 - 教科书,编程,非虚构
在Windows窗体中看起来会略有不同,但你明白了这一点:我想每本书只有一行,每本书的行列出了该书的标签。
我相信你们中的一些人会建议违反数据规范化规则,我并不完全反对它,因为这是一个个人数据库,我用来跟踪我的工作。 (它与书籍无关,但书籍是一个更简单的例子)。话虽这么说,我宁愿不使用Access专有的数据类型,以防我需要迁移到其他软件。
答案 0 :(得分:0)
您可以使用Allen Browne的Concatenate Related功能。您的设置与Allen描述的功能非常吻合。
复制代码后,您可以使用Query as,
SELECT
Books.Title,
ConcatRelated("Subject", "BookTags", "BookID = " & Books.ID)
FROM
Books;