2014-12-08 3 views
0

비즈니스 분석가, 품질 보증 분석가 등의 데이터가 포함 된 역할 집합에 대한 테이블이 있다고 가정합니다. 모두 고유 ID로 인덱싱됩니다. 고유 한 ID로 다시 인덱싱 된 People 테이블이 있습니다.여러 조건에 대해 테이블을 쿼리하는 방법

"PersonRole"이라는 여러 역할을 가진 사람들을 위해 세 번째 테이블을 만들었습니다. 비즈니스 분석가와 개발자 역할을 가진 사람 (Person ID가 2와 3이라고 가정)에 대해 PersonRole을 쿼리하려면 어떤 유형의 쿼리가 필요합니까? 하위 쿼리 또는 공용체로이를 빌드해야합니까?

나는 이것을 시도했지만 아무것도 반환하지 않습니다.

select * from PersonRole 
inner join Person on Person.Id = PersonRole.PersonId 
where Person.Id = 3 
and PersonRole.RoleId = 2 
and PersonRole.RoleId = 3 
+1

AND를 OR로 변경하십시오. 단일 행은 단일 열에 여러 값을 가질 수 없습니다. –

+0

EXISTS 하위 쿼리를 사용합니다. – CrimsonKing

답변

1

두 역할을 가진 사람을 쿼리하려면 having 절을 사용하는 집계 쿼리를 제안하십시오. 당신이 원하는 각 조건에 대해 한 번, 두 번 당신이 Person 테이블에서 더 자세한 정보를 원하는 경우

select pr.PersonId 
from PersonRole pr 
group by pr.PersonId 
having sum(case when pr.RoleId = 2 then 1 else 0 end) > 0 and 
     sum(case when pr.RoleId = 3 then 1 else 0 end) > 0; 

, 당신이

+0

이것은 내가 당신을 찾고 있었던 정확하게 그 것이다 감사합니다! 나는 having 절의 문법에 대해 다소 혼란 스럽지만. 거기에 대해 읽을 수있는 곳이 있습니까? – Michael

+0

@Michael. . . 각 조건과 일치하는 행 수를 세고 있습니다. –

1

이 시도 :

select * from PersonRole 
inner join Person on Person.Id = PersonRole.PersonId 
where Person.Id = 3 
OR PersonRole.RoleId = 2 OR 
PersonRole.RoleId = 3 

또는

select * from PersonRole 
inner join Person on Person.Id = PersonRole.PersonId 
where Person.Id = 3 
OR PersonRole.RoleId IN (2 ,3) 
+1

괜찮지 만 비즈니스 분석가 인 사람과 개발자가 아닌 사람을 검색하려면 어떻게해야합니까? – Michael

2

당신은 또한 OR

select * from PersonRole 
inner join Person on Person.Id = PersonRole.PersonId 
where Person.Id = 3 
and (PersonRole.RoleId = 2 OR PersonRole.RoleId = 3) 

IN

사용할 수 있습니다
select * from PersonRole 
inner join Person on Person.Id = PersonRole.PersonId 
where Person.Id = 3 
and PersonRole.RoleId IN (2,3) 
+1

이것은 나를 더 가깝게하지만, 분석가이자 개발자가 아닌 분석가이자 개발자 인 사람 만 원할뿐입니다. 쿼리를 수정하거나 테이블 구조 자체에서 쿼리를 수정하는 방법이 있습니까? – Michael

0

을 것을 다시 가입하거나 personRole에 가입 할 수 있습니다 :. 다음은이를 작성하는 하나의 방법이다

select p.* from 
Person p inner join 
PersonRole r2 on 
p.Id = r2.PersonId and 
r2.RoleId = 2 inner join 
PersonRole r3 on 
p.Id = r3.PersonId and 
r3.RoleId = 3 
where 
p.Id = 3 
관련 문제