我的MySQL数据库中有3个表,它们的结构如下:
Book表:
BOOK
---------------
book_id | title
---------------
1 | A
2 | B作者表:
AUTHOR
----------------
author_id | name
----------------
1 | John
2 | Bush
3 | Alex
4 | Bob然后我有一个连接表,它在表book和author之间建立了多对多关系,这意味着一本书可以由多个作者(即合著者)编写,而一个作者可以有许多他或她已经写过的书。
BOOK_AUTHOR
--------------------
book_id | author_id
--------------------
1 | 1
1 | 2
1 | 3
1 | 4
2 | 3
2 | 4是否可以通过SQL或MySQL让数据库管理系统输出如下内容:
book_id | title | authors
------------------------------------------
1 | A | John, Bush, Alex, Bob
2 | B | Alex, Bob输出中的authors行是与特定图书关联的所有作者的串联。
发布于 2013-04-08 20:47:50
由于您使用的是MySQL,因此请使用GROUP_CONCAT()来连接每个组的行。
SELECT a.Book_ID,
a.Title,
GROUP_CONCAT(c.Name ORDER BY c.Name) Authors
FROM Book a
INNER JOIN book_author b
ON a.Book_ID = b.Book_ID
INNER JOIn Author c
ON b.Author_ID = c.Author_ID
GROUP BY a.Book_ID, a.Title输出
╔═════════╦═══════╦════════════════════╗
║ BOOK_ID ║ TITLE ║ AUTHORS ║
╠═════════╬═══════╬════════════════════╣
║ 1 ║ A ║ Alex,Bob,Bush,John ║
║ 2 ║ B ║ Alex,Bob ║
╚═════════╩═══════╩════════════════════╝发布于 2015-04-28 06:26:02
这很好地解释了如何从多对多关系和3个表中提取数据。
最重要的是,我想为Oracle员工提供一个定制的解决方案,bcz Sql和Oracle没有相同的语法,很难在网上找到……所以享受吧..。
SELECT book.BOOK_ID, book.BOOK_TITLE,
listagg (CONCAT(CONCAT(author.AUTHOR_FIRSTNAME, ' '),author.AUTHOR_LASTNAME), ',')
WITHIN GROUP
(ORDER BY author.AUTHOR_FIRSTNAME) FirstName
FROM Books book
INNER JOIN authorbooks ab
ON ab.BOOKS_ID = book.BOOK_ID
INNER JOIN Authors author
ON ab.Author_id = author.Author_ID
GROUP BY book.BOOK_ID, book.BOOK_TITLE;这将以正确的格式打印,包括名字和姓氏。
https://stackoverflow.com/questions/15879385
复制相似问题