2013-09-30 97 views
0

我正在为学术论文创建一个存档。每篇论文可能有一位作者或多位作者。我创建以下列方式表:将三个表连接在一起

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

还有一个与表4相关的表4,表4列出了作者所属的大学列表,但如果过于复杂,我将暂时忽略它。

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

  • 文章
  • 论文作者

列“Paper Authors”在某些情况下将包含多个作者。

我已经写了下面的查询:

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

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

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

+1

这取决于您使用的是哪种SQL风格。例如:这可以在PostgreSQL(使用array_agg函数)/ MySQL(使用group_concat函数)中轻松完成。所以,告诉我们你正在使用什么SQL数据库。 – 2013-09-30 12:07:19

+0

您正在使用哪些DBMS? Postgres的?甲骨文? –

回答

-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

+0

他已经在使用内部连接,只是使用旧式语法。 –

+0

问题是,如何返回1列中的几位作者! –

+0

一个宁静的触发器在那里开心。查看我的编辑。 – Gusdor

1

直接SQL不幸的是,这是不可能的。您需要使用处理语言才能获得您之后的结果。

0

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