簡體   English   中英

將am:n MySQL關系與自己列中的每個實體連接

[英]Joining a m:n MySQL relation with every entity in own column

我正在開發一個用於管理圖書的網絡應用程序,目前遇到無法解決的問題。

設定

  • 每本書都有一些信息,這些信息存儲在餐桌books 主鍵是bookId ,每本書可以由1個或多個作者編寫。
  • 每個作者都有一個name ,該name與主鍵authorId一起存儲在表authors 每個作者可以寫一本或多本書籍。
  • 因此,我創建了一個鏈接表books_authors其中bookIdauthorId存儲為外鍵bookIdbooksauthorIdauthors

請在此處查看相關表格的縮寫:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM