0

我正在为学术论文创建档案。每篇论文可能有一个作者,也可能有多个作者。我以下列方式创建了表:

  • 表 1:PaperInfo - 每行包含有关纸张的信息
  • 表 2:PaperAuthor - 只有两列:包含 PaperID 和 AuthorID
  • 表 3:AuthorList - 包含作者信息。

还有一个表 4 链接到表 4,其中包含作者所属的大学列表,但我现在将其省略,以防它变得太复杂。

我希望有一个查询,它将所有三个表链接在一起,并在表中显示记录集的纸张信息,列如下:

  • 论文标题
  • 论文作者

在某些情况下,“论文作者”列将包含多个作者。

我写了以下查询:

SELECT a.*,b.*,c.*
FROM PaperInfo a, PaperAuthor b, AuthorList c
WHERE a.PaperID = b.PaperID AND b.AuthorID = c.AuthorID

到目前为止,我为每一行得到的结果是每行一个作者。我希望在一列中包含更多作者。无论如何都可以这样做吗?

注意:我使用 Access 2010 作为我的数据库。

4

5 回答 5

1

不幸的是,在直接 SQL 中,答案是不可能的。您需要使用处理语言才能获得您想要的结果。

于 2013-09-30T12:16:17.273 回答
1

由于您提到您使用的是 Access 2010,请参考这个问题:ms-access 中有 group_concat 函数吗?

特别是,阅读指向http://www.rogersaccesslibrary.com/forum/generic-function-to-concatenate-child-records_topic16&SID=453fabc6-b3z9-34z6zb14-a78f832z-19z89a2c.html的帖子

您可能需要实现自定义功能,但第二个 url 可以满足您的需求。

于 2013-09-30T12:26:11.900 回答
0

如果您知道每篇论文的最大作者数(例如 3 或 4 位),则可以使用三重或四重左连接。

于 2013-09-30T12:24:28.753 回答
0

此功能不是 SQL 标准的一部分,但不同的供应商都有针对它的解决方案,例如Pivot Table with many to many tableMySQL pivot table

于 2013-09-30T12:09:53.850 回答
-1

您所追求的是内部连接。

SQL JOIN 子句用于根据它们之间的公共字段组合来自两个或多个表的行。最常见的连接类型是:SQL INNER JOIN(简单连接)。SQL INNER JOIN 返回满足连接条件的多个表中的所有行。

http://www.w3schools.com/sql/sql_join.asp

您可能希望将内部连接与组结合起来,以便在您的结果中为您提供 1 篇论文给许多作者。

GROUP BY 语句与聚合函数一起使用,以按一列或多列对结果集进行分组。

http://www.w3schools.com/sql/sql_groupby.asp

于 2013-09-30T12:04:38.007 回答