[英]Joining a m:n MySQL relation with every entity in own column
我正在開發一個用於管理圖書的網絡應用程序,目前遇到無法解決的問題。
books
。 主鍵是bookId
,每本書可以由1個或多個作者編寫。 name
,該name
與主鍵authorId
一起存儲在表authors
。 每個作者可以寫一本或多本書籍。 books_authors
其中bookId
和authorId
存儲為外鍵bookId
的books
和authorId
的authors
。 請在此處查看相關表格的縮寫:
books
+--------+-------+-------------+
| bookId | title | numberPages |
+--------+-------+-------------+
| 1 | Alpha | 100 |
| 2 | Beta | 200 |
| 3 | Ceta | 150 |
+--------+-------+-------------+
authors
+----------+----------+
| authorId | name |
+----------+----------+
| 1 | John |
| 2 | Max |
| 3 | Gina |
| 4 | Marry |
+----------+----------+
books_authors
+--------+----------+
| bookId | authorId |
+--------+----------+
| 1 | 1 |
| 1 | 4 |
| 2 | 2 |
| 3 | 2 |
| 3 | 3 |
| 3 | 4 |
+--------+----------+
現在,我需要一條SQL語句,該語句可以給我返回一個如下所示的表。 每本書只應有一行,所有作者應放在不同的列中。 對於我來說,這正是尋找解決方案的問題,因為有時一本書有一個或兩個或三個或...作者。 因此,在創建此“聯接”表時,該語句應該是“動態的”:
Joined Table
+--------+-------+-------------+---------+---------+---------+
| bookId | title | numberPages | author1 | author2 | author3 |
+--------+-------+-------------+---------+---------+---------+
| 1 | Alpha | 100 | John | Marry | |
| 2 | Beta | 200 | Max | | |
| 3 | Ceta | 150 | Max | Gina | Marry |
+--------+-------+-------------+---------+---------+---------+
非常感謝您的幫助!
我不喜歡您當前的預期輸出,因為將來我們可能會遇到一本書,作者超過3名。 我建議以下替代方法:
SELECT
b.bookId,
b.title,
b.numberPages,
GROUP_CONCAT(a.name ORDER BY a.authorId) authors
FROM books b
LEFT JOIN books_authors ba
ON b.bookId = ba.bookId
LEFT JOIN authors a
ON ba.authorId = a.authorId
GROUP BY
b.bookId;
這種方法會生成每本書所有作者的CSV列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.