【问题标题】:I want to join five tables in MySQL我想在 MySQL 中加入五个表
【发布时间】:2014-03-27 02:24:07
【问题描述】:

书籍

  • bookid (PK)
  • 标题
  • 价格

作者

  • 创作 (PK)
  • 作者姓名

出版商

  • 公开(PK)
  • 酒吧名称

书籍作者

  • bookid (FK)
  • 授权

图书出版商

  • bookid (FK)
  • 公开

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

  • 书名
  • 标题
  • 价格
  • 作者姓名
  • 酒吧名称

我应该只得到一行来获得高于结果的查询。我写的是:

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;

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

【问题讨论】:

    标签: mysql


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多