1

次のデータベース構造があります

Books (BookId,Title) という名前の 1 つのテーブル Authors (AuthorId,AuthorName) という名前の 1 つのテーブル BooksAuthors (BookID,AuthorID) という名前の 1 つのジャンクション テーブルと他の 2 つのテーブルとの関係

私はこのクエリを使用しています:

   Select
  Books.BookId,
  Books.Title,
  Authors.AuthorName
From
  (Books Inner Join
  BooksAuthors On BooksAuthors.BookId = Books.BooksId) Inner Join
  Authors On BooksAuthors.AuthorId = Authors.AuthorId

私はこのようなものを得る:

BookId         Title            AuthorName
001           Title1            Name1
001           Title1            Name2
001           Title1            Name3
002           Title2            Name5
002           Title2            Name6

次のようなものを返すクエリを実行することは可能でしょうか?

BookId         Title            AuthorName
001           Title1            Name1;Name2;Name3
002           Title2            Name5;Name6
4

2 に答える 2

0

これにはGROUP BYforが含まれGROUP_CONCATます:

SELECT DISTINCT 
  Books.BookId,
  Books.Title,
  GROUP_CONCAT(Authors.AuthorName SEPARATOR ';')
FROM Books
  INNER JOIN BooksAuthors USING (BookId)
  INNER JOIN Authors USING (AuthorId)
GROUP BY Books.BookId, Books.Title

編集SEPARATOR:で修正GROUP_CONCAT。また、この回答はMySQLを想定しています。

于 2013-05-26T11:16:58.683 に答える
0

GROUP_CONCAT()そのために使用できます

SELECT DISTINCT 
  Books.BookId,
  Books.Title,
  GROUP_CONCAT(Authors.AuthorName,'; ')
FROM
  (Books Inner Join
  BooksAuthors On BooksAuthors.BookId = Books.BooksId) Inner Join
  Authors On BooksAuthors.AuthorId = Authors.AuthorId
于 2013-05-26T11:01:16.730 に答える