【问题标题】:Linking Three Tables together将三个表链接在一起
【发布时间】:2013-09-30 20:26:11
【问题描述】:

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

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

还有一个表 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 作为我的数据库。

【问题讨论】:

  • 这取决于您使用的 SQL 风格。例如:这可以在 PostgreSQL(使用 array_agg 函数)/MySQL(使用 group_concat 函数)中轻松完成。所以,告诉我们您正在使用什么 SQL 数据库。
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?

标签: sql ms-access-2010


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    既然您提到您使用的是 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的帖子

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          您所追求的是内部连接。

          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

          【讨论】:

          • 他已经在使用内连接,只是使用老式语法。
          • 问题是,如何在1列中返回多个作者!
          • 那里相当触发快乐的反对票。查看我的编辑。
          • @NevilleK 似乎可能需要一个来实现我们男孩想要的结果。这就是我们在这里的原因,不是吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-21
          • 1970-01-01
          • 2020-10-15
          相关资源
          最近更新 更多