Sql Oracle中的嵌套子查询
我有一个嵌套的子查询,我似乎无法理解。问题是: “使用BOOK_AUTHOR和AUTHOR表进行最上面的查询,创建一个子查询,该查询将返回BOOKID,以及编写购买次数最多的书籍的作者的姓名。要成功完成此操作,您需要首先找到最大总副本数(基于数量)售出一本书(基于bookid)在OrthyItIsTABLE表中,这将在最下面的查询中完成。这个查询的返回将用于与在中间查询中出现相同次数的OrthyItIsTABLE表中的BooID进行比较。该查询的返回将被用于与最高级查询表中与作者相关的书签进行比较。(提示:小心,解决方案需要GROUP BY和HAVE子句。) 以下是我迄今为止的声明:Sql Oracle中的嵌套子查询,sql,oracle,subquery,Sql,Oracle,Subquery,我有一个嵌套的子查询,我似乎无法理解。问题是: “使用BOOK_AUTHOR和AUTHOR表进行最上面的查询,创建一个子查询,该查询将返回BOOKID,以及编写购买次数最多的书籍的作者的姓名。要成功完成此操作,您需要首先找到最大总副本数(基于数量)售出一本书(基于bookid)在OrthyItIsTABLE表中,这将在最下面的查询中完成。这个查询的返回将用于与在中间查询中出现相同次数的OrthyItIsTABLE表中的BooID进行比较。该查询的返回将被用于与最高级查询表中与作者相关的书签进行比
SELECT ba.bookid, a.firstname, a.lastname
FROM book_author ba, author a
WHERE bookid =
(SELECT bookid, quantity
FROM order_items
WHERE quantity IN
(SELECT bookid, SUM(quantity)
FROM order_items
GROUP BY bookid);
就我所知,底部的查询是正确的。它返回一个图书id列表,其中包含每个id的总销量
现在假设我正确地阅读了这个问题,中间查询应该从底部查询返回的列表中提取图书id,该列表卖出的图书数量最多。这就是我遇到的问题。我知道我上面写的中间查询不起作用。当我试着同时测试中间查询和底部查询时,我得到一个ORA-913错误(值太多)
有谁能洞察我遗漏了什么
谢谢。问题: 不能对子查询使用
=
(除非它只返回一个值)
解决方案:
在这种情况下,请在中使用。您应该使用MAX
来查找最大值
SELECT ba.bookid, a.firstname, a.lastname
FROM book_author ba, author a
WHERE bookid IN
(SELECT bookid
FROM order_items
WHERE quantity IN
(SELECT MAX(quantity) as quantity
FROM order_items
GROUP BY bookid);
由于您没有添加架构,我不得不临时修改一些字段名,但描述中提到的是类似于此的查询。请注意,MAX(SUM())
可能不适用于所有RDBMS,但适用于Oracle
SELECT ba.bookid, a.firstname, a.lastname
FROM book_author ba
JOIN author a ON a.id = ba.authorid
WHERE bookid IN
(SELECT bookid
FROM order_items
GROUP BY bookid
HAVING SUM(quantity) =
(SELECT MAX(SUM(quantity))
FROM order_items
GROUP BY bookid));
第一个(最底部)查询选择畅销书已售出的图书数量(即所有图书的所有数量之和,只需选择最大数量)
第二个(中间)查询选择所有售出数量最高的图书的bookid(可能是平局,所以我们可能会得到几个)
最后一个(最上面的)查询只选择这些书籍的图书id和作者详细信息
.将WHERE bookid=
更改为WHERE bookid in
并从子查询中删除bookid