Relational-Theory
SQL 查詢:選擇一個人是所有現有組的成員
我正在修改我的第一個 SQL 查詢,並且對我遇到的一個問題感到完全困惑。
假設我有以下數據庫:
PERSON(PID, Name) MEMBER(PID, GroupID)
我將如何創建一個僅選擇所有現有組(即 GroupID)成員的人的元組的 SQL 查詢?
我絆倒了我能找到的關於 IN、EXISTS、ALL 等的所有內容,但沒有找到一個優雅的解決方案。
非常感謝,
佩蒂
有幾種方法可以得到這個答案。我將分兩部分解決它。首先是找出有多少組。這是一個簡單的摘要查詢:
select count(distinct GroupID) from MEMBER
第二個是一個人在多少個組。這是類似的:
select PID, COUNT(*) from MEMBER group by PID
接下來你想把這些綁在一起
select PID, COUNT(*) from MEMBER group by PID having COUNT(*) = (select count(distinct GroupID) from MEMBER)
根據您使用的 RDBMS(Oracle、DB2、MySQL),可能會有其他語法或佈局使這更快、更漂亮或更理想。
如果您知道組的總數,您可以嘗試:
SELECT PID, COUNT(GROUPID) FROM MEMBERS GROUP BY PID;
然後通過組數限制結果。