0

다음 표가 있다고 가정하십시오. Person tablepersonStatus table.상태가 모두 0 인 레코드를 선택하는 방법은 무엇입니까?

declare @Persons table 
(PersonId int) 

insert into @Persons select 10 
insert into @Persons select 11  

declare @PersonStatus table 
(id int,statuss int) 

insert into @PersonStatus (id,statuss) values(10,0) 
insert into @PersonStatus (id,statuss) values(10,0) 
insert into @PersonStatus (id,statuss) values(11,1) 
insert into @PersonStatus (id,statuss) values(10,0) 
insert into @PersonStatus (id,statuss) values(11,0) 

지금 나는 그들의 상태의 모든이

(10)는 어떻게 할 ---> 바로 제로 결과입니다 그 사람의 ID를 찾으려면?

+0

자식 테이블에 행이없는 사람을 반환 하시겠습니까? –

+0

아니요 제 시나리오가 아닙니다 –

+0

모든 상태가 0 인 사람 만 반환 하시겠습니까? –

답변

1
SELECT id 
FROM @PersonStatus 
GROUP BY ID 
HAVING COUNT(DISTINCT statuss) = 1 AND 
     MAX(statuss) = 0 

OR

SELECT id 
FROM @PersonStatus 
GROUP BY ID 
HAVING MAX(statuss) = MIN(statuss) AND 
     MAX(statuss) = 0 
0
select distinct p.id from @PersonStatus as p 
where Statuss = 0 
and not exists (select null from @Personstatus as t 
       where p.id = t.id and t.statuss <> 0) 
,
1

테이블이 단지 PersonId 열 이상이고 다른 열을 원한다고 생각하기 때문에 @Persons이 쿼리에 포함되어야한다고 생각합니다.

SELECT p.PersonId --, other columns from p 
FROM @Persons AS p 
WHERE EXISTS (SELECT id FROM @PersonStatus 
    WHERE id = p.PersonId 
    GROUP BY id HAVING MAX(statuss) = 0);