【发布时间】:2015-06-04 13:38:53
【问题描述】:
与大多数数据库一样,在 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
我想要一个表格,只列出每本唯一的书一次,并且该书的所有作者都在同一行。像这样的:
十九八十四 - 科幻、反乌托邦主题
Freakonomics - 非小说,经济学
C 编程语言 - 教科书、编程、非小说类
它在 Windows 窗体中看起来有点不同,但你明白了:我希望每本书只有一行,每本书的行上都列出了该书的标签。
我相信你们中的一些人会建议打破数据规范化规则,我并不完全反对,因为这是我用来跟踪我所做工作的个人数据库。 (它与书籍无关,但书籍是一个更简单的例子)。话虽如此,我不希望使用 Access 专有的数据类型,以防我需要迁移到其他软件。
【问题讨论】:
-
右连接,左连接...大多数人迷失在右连接。
-
@jarlh 英文:返回所有书籍,无论书籍在 BookTag 表中是否有匹配条目
-
我知道,但大多数人的做法恰恰相反,首先是“主要”表。像 Books LEFT JOIN BookTags 之类的东西左加入标签。
标签: sql winforms ms-access vba