Relational-Theory

SQL 查詢:選擇一個人是所有現有組的成員

  • November 24, 2014

我正在修改我的第一個 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;

然後通過組數限制結果。

引用自:https://dba.stackexchange.com/questions/83426