假設我有一個表Person(Name, Hobby)
,總共有3種愛好。該表中的值是一樣SQL:加入完全參與
Amy | Stamp Collection
Kevin | Mountain Biking
Kevin | Stamp Collection
Ron | Mountain Biking
這裏,Kevin
既有愛好Mountain Biking
和Stamp Collection
。我需要編寫一個查詢來檢索Kevin
。
我該如何獲得擁有所有愛好的人?
感謝
假設我有一個表Person(Name, Hobby)
,總共有3種愛好。該表中的值是一樣SQL:加入完全參與
Amy | Stamp Collection
Kevin | Mountain Biking
Kevin | Stamp Collection
Ron | Mountain Biking
這裏,Kevin
既有愛好Mountain Biking
和Stamp Collection
。我需要編寫一個查詢來檢索Kevin
。
我該如何獲得擁有所有愛好的人?
感謝
SELECT Name
FROM Person
GROUP BY Name
HAVING COUNT(*) = (SELECT COUNT(DISTINCT Hobby) FROM Person)
這就是要求的,但它是一個有趣的問題:) – Randy
如果你需要得到該人的姓名和計數使用此:
SELECT count(*) as count, Name FROM Person group by Name limit 1
這將讓你的人的名字和愛好的數量,他們有。爲了讓所有愛好的字段添加到查詢和刪除分組:
SELECT Name, Hobby FROM Person where Name = {name} limit 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)
從答案中可以看出,目前還不清楚你在問什麼。你能重述一下這個問題嗎?你真的想要「擁有所有愛好的人」,還是想要某個人的所有愛好? – bfavaretto
@bfavaretto我需要「擁有所有愛好的人」......換過話。 – bdhar
好的,@Cade Roux給了你答案。 – bfavaretto