您需要对所有表使用连接。在FROM 子句中使用多个表会产生笛卡尔积。试试这个
SELECT books.bookid, books.title, books.price, authors.authorname
FROM books
INNER JOIN bookauthors ON books.bookid = bookauthors.bookid
INNER JOIN publisherbook ON books.bookid = publisherbook.bookid
INNER JOIN authors ON bookauthors.authorid = authors.authorid -- assuming you meant authorid and not authored
WHERE books.bookid = 459567;
当然,如果您的图书有多个作者,您将在结果集中获得多行。
我不确定您为什么要加入 publisherbook(或原始列表中的 bookpublisher),除非您只是确保您的图书有出版商。同样,多个发布者会导致更多(重复)结果。
如果您只是想确保您的图书至少有一个出版商,请改用此方法...
SELECT books.bookid, books.title, books.price, authors.authorname
FROM books
INNER JOIN bookauthors ON books.bookid = bookauthors.bookid
INNER JOIN authors ON bookauthors.authorid = authors.authorid -- assuming you meant authorid and not authored
WHERE EXISTS (
SELECT 1 FROM publisherbook
WHERE publisherbook.bookid = books.bookid
) AND books.bookid = 459567;