2012-02-27 14 views
2

テーブルPerson(Name, Hobby)があり、合計3つの趣味があるとします。表の値は、ここでSQL:完全参加の参加

Amy | Stamp Collection 
Kevin | Mountain Biking 
Kevin | Stamp Collection 
Ron | Mountain Biking 

のようなもので、Kevinは趣味Mountain BikingStamp Collectionの両方を持っています。 Kevinを取得するためのクエリを作成する必要があります。

すべての趣味を持っている人を入手するにはどうすればいいですか

おかげ

+0

あなたが回答から分かるように、あなたが何を求めているかは分かりません。あなたはその質問を言い換えることができますか?あなたは本当に "すべての趣味を持っている人"、または特定の人のためにすべての趣味をしたいですか? – bfavaretto

+0

@bfavaretto私は "すべての趣味を持っている人"が必要です..言い換えると。 – bdhar

+0

さて、@Cade Rouxが答えをくれました。 – bfavaretto

答えて

7
SELECT Name 
FROM Person 
GROUP BY Name 
HAVING COUNT(*) = (SELECT COUNT(DISTINCT Hobby) FROM Person) 

Runnable example

+0

それは頼まれたものですが、それは面白い質問です:) – Randy

0

あなたは、この人の名前を取得し、使用をカウントする必要がある場合:

SELECT count(*) as count, Name FROM Person group by Name limit 1 

をこれは、あなたの人の名前や趣味、彼らの量を取得します持ってる。取得するには、すべての趣味は、クエリにフィールドを追加し、グループを削除します。

SELECT Name, Hobby FROM Person where Name = {name} limit 1 

(中括弧なし)

1

注:がテストされていない、とOracle SQL で正しいをあなたはこれを試すことができます:

SELECT * 
    FROM 
     (
     SELECT p.name, 
       count(distinct p.hobby) cnt 
     FROM Person p 
     GROUP BY p.name 
    ) p2 
WHERE p2.cnt = (SELECT count(distinct Hobby) 
        FROM Person)