2016-11-30 8 views
0

私は、より多くのアパートを所有する所有者の名前を見つけるために、EXISTS、IN、ALL、ANYなどのネストされた選択と演算子を使用する必要があるプロジェクトを持っています。クエリをネストされた選択に変更するにはどうすればよいですか?

私は、複数のアパートを持っている所有者を見つけるためには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 

を書いたしかし、どのように私は、ネストされた選択を使用しないと、演算子の1つEXISTS、IN、ALL、ANY?このような例

+0

これはmysqlではありません – e4c5

+1

最初になぜあなたは結合の代わりに入れ子の選択を使用する必要がありますか? – noodlesegg

答えて

0

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

私はあなたが書いたクエリが正しいことを非常に確認していません。

あなたが提供正しいクエリは(ID)の代わりにカウント(id_ap)をカウントします

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 in id = ow.id)を選択すると、アパート数が計算されます。

関連する問題