2012-02-27 72 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)