关于相关的子查询,我有一个简单的问题:
表和数据如下:
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以上。
但是,当我使用以下查询时,只返回一行:
select * from
authors a
where 100 < all( select price from books b where a.nAME = b.NAME );发布于 2017-09-03 03:59:55
如果您想用具有给定条件的图书表获取所有匹配的记录,那么下面的查询将有效。
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 );发布于 2017-09-03 04:22:47
如果你想要所有的名字书,在最低价格大于100的情况下,我只想:
select b.*
from (select b.*, min(b.price) over (partition by b.name) as minprice
from books b
) b
where minprice > 100;如果您只想要这个名称,我将使用聚合:
select b.name
from books b
group by b.name
having min(b.price) > 100;这两种方法似乎都比您的方法简单。
发布于 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;
https://stackoverflow.com/questions/46019995
复制相似问题