2016-11-30 46 views
0

我有一个项目,我必须使用嵌套选择和像EXISTS,IN,ALL,ANY这样的运营商来查找拥有更多公寓的业主名称。如何将查询更改为嵌套select?

我有2个表所有者和公寓

Owner 
"ID" NUMBER(5,0), 
"NAME" VARCHAR2(20), 
"PHONE" NUMBER(10,0), 
CONSTRAINT "PROPR" PRIMARY KEY ("ID") 
USING INDEX ENABLE; 

Apartment 
"ID_AP" NUMBER(5,0), 
"ADDRESS" VARCHAR2(35), 
"SURFACE" NUMBER(10,0), 
"ID" NUMBER(5,0), 
CONSTRAINT "APART" PRIMARY KEY ("ID_AP") 
USING INDEX ENABLE; 

为了找到谁拥有一个以上的公寓业主,我写了这个

SELECT name, id, count(id) 
from apartment join owner 
using (id) 
group by id, name 
having count(id)>1 

但我怎么使用嵌套选择和其中一个操作符EXISTS,IN,ALL,ANY?

+0

这不是mysql – e4c5

+1

首先为什么你需要使用嵌套select而不是join? – noodlesegg

回答

0

例如像这样:

select * from owner where id IN (
    SELECT id 
    from apartment 
    group by id 
    having count(id)>1) 
0

我不太清楚,你写的查询是正确的。

您提供也要算(id_ap),而不是数量(ID)正确的查询

SELECT o.id, o.name, count(a.id_ap) 
from apartment a 
join owner o on o.id = a.id 
group by o.id, o.name 
having count(a.id_ap)>1 

使用条款相同的查询,但没有公寓的数量,你只知道它的2个或更多

select o.id, o.name 
from owner o 
where o.id in (select distinct(a.id) from apartment a 
group by a.id having count(a.id_ap) > 1); 

您在公寓表引用所有者表中缺少外键约束。

0
WITH myView(name, id,appcount) 
as 
SELECT name, id, (select count(id) FROM apartment where id = ow.id) 
FROM owner ow 

SELECT * from myView 
WHERE appcount > 2 

使用WITH创建内联视图并用于编写查询。 (select count(id)FROM apartment where id = ow.id)选择外部查询将计算公寓数量。