2011-10-31 63 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`)