【问题标题】:SQL Query that merges rows with junction table将行与联结表合并的 SQL 查询
【发布时间】:2013-05-26 10:57:09
【问题描述】:

我有以下数据库结构

1 表名为 Books (BookId,Title) 1 表名为 Authors (AuthorId,AuthorName) 1 个名为 BooksAuthors (BookID,AuthorID) 的连接表,与其他 2 个表有关系

我正在使用这个查询:

   Select
  Books.BookId,
  Books.Title,
  Authors.AuthorName
From
  (Books Inner Join
  BooksAuthors On BooksAuthors.BookId = Books.BooksId) Inner Join
  Authors On BooksAuthors.AuthorId = Authors.AuthorId

我得到这样的东西:

BookId         Title            AuthorName
001           Title1            Name1
001           Title1            Name2
001           Title1            Name3
002           Title2            Name5
002           Title2            Name6

我想知道是否可以执行返回如下内容的查询:

BookId         Title            AuthorName
001           Title1            Name1;Name2;Name3
002           Title2            Name5;Name6

【问题讨论】:

  • 你用的是什么数据库?
  • 数据库在ms访问中

标签: sql vb.net ms-access-2007


【解决方案1】:

您可以为此使用GROUP_CONCAT()

SELECT DISTINCT 
  Books.BookId,
  Books.Title,
  GROUP_CONCAT(Authors.AuthorName,'; ')
FROM
  (Books Inner Join
  BooksAuthors On BooksAuthors.BookId = Books.BooksId) Inner Join
  Authors On BooksAuthors.AuthorId = Authors.AuthorId

【讨论】:

  • 我认为你错过了group by
  • 另外,您在group_concat 中缺少separator
【解决方案2】:

这包括GROUP BY 用于GROUP_CONCAT

SELECT DISTINCT 
  Books.BookId,
  Books.Title,
  GROUP_CONCAT(Authors.AuthorName SEPARATOR ';')
FROM Books
  INNER JOIN BooksAuthors USING (BookId)
  INNER JOIN Authors USING (AuthorId)
GROUP BY Books.BookId, Books.Title

编辑:在GROUP_CONCAT 中修复SEPARATOR。此外,这个答案假设 MySQL。

【讨论】:

  • 感谢回复,但我忘了说我在 vb.net 项目中使用查询,并且 group_concat() 似乎不支持任何替代方法
猜你喜欢
  • 2018-02-22
  • 2017-11-02
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 2012-06-14
  • 2010-11-12
  • 2017-03-24
  • 2023-02-10
相关资源
最近更新 更多