Mysql SQL: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

我的MySQL数据库中有3个表,它们的结构如下:

书桌:

     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;
这将以良好的格式打印,包括名字和姓氏