我有一個表,其結構與下面提到的格式類似。 它們看起來像這樣
書
| ID | title |
| 1 | A |
| 2 | B |
書籍_合作者
| COLLAB_ID |BookID | Type |
| 1 | 1 | Author
| 2 | 1 | 編輯
| 3 | 1 | 發行人 |
合作者
| ID | title |
| -- | ----- |
| 1 | D |
| 2 | E |
| 3 | F |
我需要以下格式的結果,其中作者、編輯和出版商等細節將顯示在不同的列中。
需要注意的是,有些時候細節可能不存在于Book_Collaborators表中
。| BOOK ID | Title | 作者 | 編輯 | 出版社 |
| --------- | ----- | ------ | --------- |
| 1 | A | D | E | F |
我想出了這個查詢,但我不想多次加入同一個表
。select book.id as BookId, c.title as author,c1.title as Editor
from Book books
left join Book_Collaborators bc on (book. id=bc.book_id and bc.type='author')
left join Collaborators c on (bc.COLLAB_ID=c.id)
left join Book_Collaborators bc1 on (book. id=bc1.book_id and bc1.type='Editor')
left join Collaborators c1 on (bc1.COLLAB_ID=c1.id)
uj5u.com熱心網友回復:
顯示所有的書籍資訊,無論它在book_collaborator表中是否有相關的值。如果只需要相關值,那么使用INNER JOIN而不是LEFT JOIN。由于書的ID在書表中是唯一的,所以在標題列使用聚合函式,以避免它添加GROUP BY子句。
-- MySQL
SELECT b.id BOOK_ID
, MAX(b.title) Title
, MAX(CASE WHEN bc. btype = 'Author' THEN c.title END) 作者
, MAX(CASE WHEN bc. btype = 'Editor' THEN c.title END) 編輯
, MAX(CASE WHEN bc. btype = 'Publisher' THEN c.title END) 出版商
FROM Book b
LEFT JOIN Book_Collaborators bc
ON b.id = bc.book_id
LEFT JOIN Collaborators c
ON c.id = bc.collab_id
GROUP BY b.id
請從網址https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=069dc205f176968d61d462ad3cad7568
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324208.html
標籤:
上一篇:從資訊串列中檢查用戶是否喜歡味精
