2012-06-20 37 views
0

我有一个非常基本的mysql表称为memberships,它跟踪哪些人属于哪个组。人们可以属于很多群体。看似简单的mysql查询,证明是艰难的

它包含3个字段:ID,为person_id,GROUP_ID

,我需要选择所有具有 '20' 和 '53' 的group_ids的person_ids。人们只能属于这两个群体。

回答

2
SELECT DISTINCT a.person_id 
FROM memberships a 
JOIN memberships b 
    ON a.person_id = b.person_id 
    AND b.group_id = 53 
LEFT JOIN memberships c 
    ON a.person_id = c.person_id 
    AND c.group_id NOT IN (20,53) 
WHERE a.group_id = 20 AND c.person_id IS NULL; 

虽然你也可以去NOT EXISTS格式。

+0

很好,谢谢! –