在MS Access中,如何以多对多关系列出记录,以便列出的表中的记录不会重复?

时间:2015-06-04 13:38:53

标签: sql winforms ms-access access-vba

与大多数数据库一样,在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专有的数据类型,以防我需要迁移到其他软件。

1 个答案:

答案 0 :(得分:0)

您可以使用Allen Browne的Concatenate Related功能。您的设置与Allen描述的功能非常吻合。

复制代码后,您可以使用Query as,

SELECT 
    Books.Title, 
    ConcatRelated("Subject", "BookTags", "BookID = " & Books.ID) 
FROM 
    Books;