SQL在3个表之间选择

时间:2009-09-03 15:08:41

标签: sql select

我有3张桌子

1。 tBooks

ID 标题 AUTHORID

2。 tAuthors

ID 名称

3。 TBookAuthors

BOOKID AUTHORID

一本书可以有几个作者,作者可以写几本书

所以我需要按名称搜索一本书并选择一条记录中的所有作者。

我试过这样,但结果是一些记录(作者多少)。此记录之间只有不同之处是作者的姓名。

select a.[ID], a.[title], c.[name] 
from tBooks a
    inner join tBookAuthors b
    on a.[ID] = b.bookID
    inner join tAuthors c
    on b.[authorID] = c.[ID]
where title like '%Blen%'

5 个答案:

答案 0 :(得分:0)

如果您发布了正在使用的SQL DBMS,那将非常有用。

在MySQL中,您可以使用GROUP_CONCAT -

答案 1 :(得分:0)

将内部联接更改为外部联接,您可能拥有没有相应tBookAuthors或tAuthors记录的书籍。

由于您正在应用where子句过滤器,您实际期望获得多少本书?运行此查询以查找:

select count(*)
from tBooks 
where title like '%Blen%'

答案 2 :(得分:0)

您可以尝试使用左连接而不是内连接来连接a和b。

SELECT a.ID, a.title, c.name
FROM tBooks a
    LEFT JOIN tBookAuthors b
    ON a.ID = b.bookID
    LEFT JOIN tAuthors c
    ON b.authorID = c.ID
WHERE a.title LIKE '%Blen%'

答案 3 :(得分:0)

SELECT a.name, b.title FROM tBookAuthors x INNER JOIN tAuthors a ON a.id = x.AuthorID 
INNER JOIN tBooks b ON x.BookID = b.id
WHERE b.Title LIKE '%this book title%';

您不需要tBooks表中的authorID列。

答案 4 :(得分:0)

试试这个。

 SELECT a.ID, a.title, c.name
 FROM tBooks a
 LEFT JOIN tBookAuthors b ON a.ID = b.bookID
 left JOIN tAuthors c ON b.authorID = c.ID
 WHERE a.title LIKE '%Blen%'