繁体   English   中英

我想在MySQL中加入五个表

[英]I want to join five tables in MySQL

图书

  • bookid(PK)
  • 标题
  • 价钱

作者

  • 撰写(PK)
  • AUTHORNAME

出版者

  • 耻骨(PK)
  • pubname

bookauthors

  • bookid(FK)
  • AUTHORID

bookpublisher

  • bookid(FK)
  • 发布商ID

我想加入所有五个表并获取这些列值:

  • BOOKID
  • 标题
  • 价钱
  • AUTHORNAME
  • pubname

我应该只获得一行查询以获得上述结果。 我写的是:

select books.*, authors.authorname
from authors,books
inner join bookauthors on books.bookid = bookauthors.bookid
inner join publisherbook on books.bookid = publisherbook.bookid
where books.bookid = 459567;

但相反,我得到了许多重复数据的行。

您需要为所有表使用连接。 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM