Mysql SQL:3个表(书、作者、书作者)
我的MySQL数据库中有3个表,它们的结构如下: 书桌:Mysql SQL:3个表(书、作者、书作者),mysql,sql,join,concatenation,Mysql,Sql,Join,Concatenation,我的MySQL数据库中有3个表,它们的结构如下: 书桌: BOOK --------------- book_id | title --------------- 1 | A 2 | B 作者表: AUTHOR ---------------- author_id | name ---------------- 1 | John 2 | Bush 3 | Alex 4 | Bob
BOOK
---------------
book_id | title
---------------
1 | A
2 | B
作者表:
AUTHOR
----------------
author_id | name
----------------
1 | John
2 | Bush
3 | Alex
4 | Bob
然后我有一个连接表,它在书和作者之间建立了一个多对多的关系,这意味着一本书可以由许多作者(即合著者)写,一个作者可以有许多他或她写过的书
BOOK_AUTHOR
--------------------
book_id | author_id
--------------------
1 | 1
1 | 2
1 | 3
1 | 4
2 | 3
2 | 4
是否可以通过SQL或MySQL让DBMS输出如下内容:
book_id | title | authors
------------------------------------------
1 | A | John, Bush, Alex, Bob
2 | B | Alex, Bob
输出中的authors行是与特定书籍关联的所有作者的串联。由于您使用的是
MySQL
,请使用GROUP\u 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 ║
╚═════════╩═══════╩════════════════════╝
这很好地解释了多对多关系和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;
这将以良好的格式打印,包括名字和姓氏