2011-10-31 65 views
2

我有一个表的设计,像这样查找外键匹配多行值

person_id | department 
1   | a 
1   | b 
2   | a 
2   | c 
3   | b 
3   | a 

,并希望有一个查询返回所有属于部门A和B为person_id的的。我想这将是沿线

select person_id from table group by person_id having .... 

但不能完全弄清楚。有谁知道我该怎么做?

编辑:我想我能做到以下几点。但它看起来像一个黑客。

select person_id from table where department='A' or department='B' 
    group by person_id having count(1) > 1 

回答

4
SELECT 
    person_id 
FROM 
    yourTable 
WHERE 
    department = 'a' 
    OR department = 'b' 
GROUP BY 
    person_id 
HAVING 
    COUNT(DISTINCT department) = 2 

注:如果一个人可以是同一部门不止一次的成员DISTINCT时,才需要。

1

您还可以使用子查询做到这一点:

SELECT person_id 
FROM table t1 
WHERE t1.department = 'a' 
    AND EXISTS (SELECT 1 
      FROM table t2 
      WHERE t2.department = 'b' 
       AND t1.person_id = t2.person_id`)