sql连接通过链接表合并重复项逗号分隔

sql连接通过链接表合并重复项逗号分隔,sql,join,sqlite,Sql,Join,Sqlite,我有一个经典的三表联接: 书籍(书号、书名等) 人(人名、姓名等) PersonBookLink(BookID、PersonID、角色) 我有经典的内部连接: SELECT Book.Title as title, Person.Name as author FROM PersonBookLink INNER JOIN Book ON PersonBookLink.BookID = Book.BookID INNER JOIN Person ON Pe

我有一个经典的三表联接:

  • 书籍(书号、书名等)
  • 人(人名、姓名等)
  • PersonBookLink(BookID、PersonID、角色)
我有经典的
内部连接

SELECT Book.Title as title, Person.Name as author 
FROM PersonBookLink 
   INNER JOIN Book
      ON PersonBookLink.BookID = Book.BookID
   INNER JOIN Person
      ON PersonBookLink.PersonID = Person.PersonID
;
这与预期的一样有效,但我可能有多个条目用于同一本
,因为它可能有多个作者

我希望合并这样的记录,每个
书籍只有一个条目
,并且在
格式中有一个组合的
作者
字段
“Author1,Author2,…”
。这可以直接用SQL实现吗

我知道我可以通过编程方式合并结果集中的记录,但这相当混乱,如果可能的话,我希望避免

如果有必要的话,我目前正在使用SQLite3数据库


注意:我看到了,但我不需要计算结果,只需要连接它们。

您需要一个
分组依据
分组条件()


注意,我在查询中引入了表别名。它们使查询更易于编写和阅读。

您需要一个
分组依据
分组条件()


注意,我在查询中引入了表别名。它们使查询更易于编写和阅读。

下面的查询可以解决您的问题

SELECT Book.Title as title, group_concat(Person.Name) as author 
FROM PersonBookLink 
INNER JOIN Book ON PersonBookLink.BookID = Book.BookID 
INNER JOIN Person ON PersonBookLink.PersonID = Person.PersonID 
GROUP BY Book.Title

group_concat使用可选的第二个参数(字符串)作为连接分隔符,如果您不需要单个“,”字符。

下面的查询可以解决您的问题

SELECT Book.Title as title, group_concat(Person.Name) as author 
FROM PersonBookLink 
INNER JOIN Book ON PersonBookLink.BookID = Book.BookID 
INNER JOIN Person ON PersonBookLink.PersonID = Person.PersonID 
GROUP BY Book.Title
group_concat采用可选的第二个参数(字符串)作为串联分隔符(如果您不需要单个“,”字符)