我有3张桌子
ID 标题 AUTHORID
ID 名称
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%'
答案 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%'