2013-05-26 81 views
1

我有以下的数据库strucutureSQL查询与结表合并行

1表名为Books(BOOKID,标题) 1表署名作者(的AuthorID,AUTHORNAME) 1接线表命名BooksAuthors(的BookID,属于AuthorID )与关系到其他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 
+0

您使用的数据库是? – rtcherry

+0

该数据库是在ms访问 – user2422053

回答

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 
+0

我认为你错过了'group by' –

+0

此外,你缺少'group_concat'中的'separator'。 – rtcherry

0

这包括GROUP BYGROUP_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 

编辑:修复SEPARATORGROUP_CONCAT。此外,这个答案假设MySQL。

+0

thx的答复,但我忘了说,我在一个vb.net项目中使用查询和group_concat()doens似乎不支持任何替代 – user2422053