をカンマ区切り重複をマージするリンクテーブルを介して参加:SQLは、私は、古典的な三つのテーブルには、参加してい
- ブック(BookID、タイトル、...)
- は人(PERSONID、名前、... )
- PersonBookLink(BookID、PERSONID、役割)
私は古典INNER JOIN
を持っている:
SELECT Book.Title as title, Person.Name as author
FROM PersonBookLink
INNER JOIN Book
ON PersonBookLink.BookID = Book.BookID
INNER JOIN Person
ON PersonBookLink.PersonID = Person.PersonID
;
この期待通りに動作しますが、私はそれを持っている可能性があるため、同じBook
のための複数のエントリを有することができるより1本の著者その後、
Book
と組み合わせる
author
分野でのためのちょうど一つのエントリを有するそのようなレコードをマージしたい
フォーム"Author1, Author2, ..."
。これはSQLで直接可能ですか?
私はプログラムで結果セット内のレコードをマージすることができますが、それはむしろ乱雑であり、可能ならば避けたいと思います。
現在、SQLite3データベースを使用しています(問題がある場合)。
注:私はthis answerを見ましたが、結果を数えずに連結する必要はありません。私はあなたのクエリにテーブルの別名を導入
SELECT b.Title, GROUP_CONCAT(p.Name, ', ') as authors
FROM PersonBookLink pbl INNER JOIN
Book b
ON pbl.BookID = b.BookID INNER JOIN
Person p
ON pbl.PersonID = p.PersonID
GROUP BY b.Title;
注: