首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle on SUBQUERY

Oracle on SUBQUERY
EN

Stack Overflow用户
提问于 2017-09-03 03:26:10
回答 3查看 43关注 0票数 2

关于相关的子查询,我有一个简单的问题:

表和数据如下:

代码语言:javascript
复制
CREATE TABLE AUTHORS
(
   NAME  VARCHAR2(10 BYTE)  
);

Insert into AUTHORS Values ('john');
Insert into AUTHORS Values ('bill');
Insert into AUTHORS Values ('dave');


 CREATE TABLE BOOKS
 (
   NAME   VARCHAR2(10 BYTE),
   PRICE  INTEGER
 );


Insert into BOOKS Values ('john', 101);
Insert into BOOKS Values ('john', 200);
Insert into BOOKS Values ('john', 300);
insert into books values ('bill', 200 );
Insert into BOOKS Values ('bill', 10);
Insert into BOOKS Values ('dave', 5);
COMMIT;

问:这是约翰所有的书,价格都在100以上。

但是,当我使用以下查询时,只返回一行:

代码语言:javascript
复制
  select * from
    authors a
     where  100 < all( select price from books b where a.nAME = b.NAME );
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-03 03:59:55

如果您想用具有给定条件的图书表获取所有匹配的记录,那么下面的查询将有效。

代码语言:javascript
复制
select * from
    authors a join books c on a.name=c.name
     where  100 < all( select price from books b where a.nAME = b.NAME );
票数 1
EN

Stack Overflow用户

发布于 2017-09-03 04:22:47

如果你想要所有的名字书,在最低价格大于100的情况下,我只想:

代码语言:javascript
复制
select b.*
from (select b.*, min(b.price) over (partition by b.name) as minprice
      from books b
     ) b
where minprice > 100;

如果您只想要这个名称,我将使用聚合:

代码语言:javascript
复制
select b.name
from books b
group by b.name
having min(b.price) > 100;

这两种方法似乎都比您的方法简单。

票数 1
EN

Stack Overflow用户

发布于 2017-09-03 04:17:39

如果你要求把价格在100以上的书还给约翰,那就可以了。

SELECT * FROM authors a INNER JOIN books b ON a.name = b.name WHERE a.name = 'john' AND b.price > 100;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46019995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档