将三个表连接在一起

时间:2013-09-30 12:00:59

标签: sql ms-access-2010

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

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

还有一个与表4相关的表4,其中包含作者所属的大学列表,但我现在暂时将其遗漏,以防它变得太复杂。

我希望有一个Query将所有三个表链接在一起,并在表格中显示记录集的Paper Information,其中包含以下列:

  • 文章标题
  • 论文作者

在某些情况下,“论文作者”一栏将包含多位作者。

我写了以下查询:

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

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

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

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

由于您提到您使用的是Access 2010,请参阅此问题:is there a group_concat function in ms-access?

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

的帖子

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

答案 2 :(得分:0)

此功能不是SQL标准的一部分,但不同的供应商为其提供了解决方案,例如参见Pivot Table with many to many tableMySQL pivot table

答案 3 :(得分:0)

如果你知道每篇论文的最大作者数量(例如3或4),你就可以放弃三联或四联。

答案 4 :(得分:-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