当前位置: 首页 > 知识库问答 >
问题:

我想在MySQL中加入五个表

鲍国兴
2023-03-14
    null
  • 作者(PK)
  • AuthorName
  • Pubid(PK)
  • pubName
  • 书籍ID(FK)
  • authorid
    null
    null

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

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;

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

共有1个答案

韦望
2023-03-14

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

当然,如果您的书有多个作者,您将在您的ResultSet中获得多行。

我不确定您为什么加入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;
 类似资料:
  • 问题内容: 我的代码。 我的问题,当表单执行此文件时,我想将这30天添加到数据库的日期列中,然后在fname中插入fname,在web中插入web,并在日期+ 30间隔中插入日期。 谢谢你。 问题答案: 使用以下查询:

  • 我想在pyspark中以如下方式连接两个数据帧df1: df2 看起来像: 我想以这样的方式连接两个数据帧,使其看起来像: 我做了什么: 但是,不幸的是,这对我来说并不奏效。任何形式的帮助或暗示都将非常感谢。

  • 问题内容: 我有一个带有包含文本的列的表,并且我想选择所有表,其中第二个表中某一行的文本出现在该行中。这是一个伪查询: 但是,以上查询不起作用。如何正确执行此操作? 问题答案: 您不能使用运算符连接字符串(仅用于算术运算)。使用代替。

  • 我使用List来动态存储值,但我必须在二进制搜索程序中输入之前指定List的大小。我需要帮助,因为我不想将大小作为输入。 我曾尝试使用,但这行不通,有人建议我使用 size() 现在我希望用户输入元素,直到他想要,然后使用二进制搜索找到元素的索引

  • 我添加了一个foreignKey列来指定用户的角色。这是users表:在我将nullable()添加到role_id列之前,他们被告知role_id列没有默认值,当我添加nullable()时,他们将NULL值插入表中 这是角色表: 这是角色列的刀片代码:我在刀片代码中添加了一个数组,以在选项标记中显示其内容,属性名称为“role_id” 这是“CreateNewUser.php”文件的创建方法:

  • 问题内容: 如何将两个除数的结果取整,例如 和我一样 $ testOne应当将其舍入为“ 2”作为3/2 = 1.5的答案时包含“ 1” 问题答案: 要进行舍入运算,只需将其加到分子上即可。 例子,四舍五入: 例子,四舍五入: 要四舍五入,将其加到分子(一半将四舍五入):