Найти внешний ключ, соответствующий нескольким значениям строки - PullRequest
2 голосов
/ 31 октября 2011

У меня есть такой дизайн стола

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

и хотел бы, чтобы запрос возвращал все person_id, принадлежащие как отделам a, так и b. Я подумал, что это будет что-то вроде

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

Ответы [ 2 ]

4 голосов
/ 31 октября 2011
SELECT
  person_id
FROM
  yourTable
WHERE
     department = 'a'
  OR department = 'b'
GROUP BY
  person_id
HAVING
  COUNT(DISTINCT department) = 2

Примечание: DISTINCT необходим, только если человек может быть членом одного и того же отдела более одного раза.

1 голос
/ 31 октября 2011

Вы также можете достичь этого с помощью подзапроса:

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`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...