2016-12-15 5 views
0

특정 유형의 약속과이 유형의 약속이없는 사람들에 대해 쿼리를 실행하려고하지만 쿼리를 실행할 때 여전히 많은 결과가 나타납니다.올바른 결과를 반환하지 않는 쿼리

이 특정 날짜 범위에서 특정 약속이없는 사람들 만 원합니다. 여기까지 내 검색어입니다. 당신이 볼 수 있듯이

select COUNT(patient.PatientID) 
from Episode 
join Patient 
on Episode.PatientID = patient.PatientID 
where Episode.EpisodeTypeID not in 
(
'FCB9EAA0-C814-413E-A5FC-48547EF973B7', 
'E422A8FA-839B-44AD-9A60-6973FEF39361', 
'9254B31D-A304-498C-ADE4-F4003997C8FA') 
and Episode.EpisodeDate between '2016-04-01' and '2016-12-15' 

, 나는 단지 원하는 EpisodeID의의 이러한 특정하고, 다음 ID 년대 없었 사람. 쿼리를 실행하면이 약속이 제거되고이 날짜 범위에있는 다른 모든 약속이 표시됩니다.

+0

쿼리는 사용자가 생각하는 바를 묻지 않습니다. * 모든 환자 *와 특정 에피소드를 제외한 모든 에피소드를 묻습니다. 'Patient' 테이블에 제한을 두지 않았으므로 모든 환자가 –

답변

3

당신은 not exists 또는 not in를 사용하여이 접근 할 수

select COUNT(p.PatientID) 
from patient p 
where not exists (select 1 
        from Episode e 
        where e.PatientID = p.PatientID and 
         e.EpisodeTypeID in ('FCB9EAA0-C814-413E-A5FC-48547EF973B7', 
              'E422A8FA-839B-44AD-9A60-6973FEF39361', 
              '9254B31D-A304-498C-ADE4-F4003997C8FA' 
              ) and 
         e.EpisodeDate between '2016-04-01' and '2016-12-15' 
       ); 

조회에 전혀 다른 일을하고있다. 이 세 가지가 아닌 에피소드의 수를 세고 있습니다. 환자를 세지 않고 있습니다.

+0

과 일치합니다. 이것은 나에게 더 나은 결과를 확실히 주었지만 여전히 적절하지는 않습니다. 나는 방금 쿼리를 실행하여이 데이터베이스에 총 255 명의 환자가 있다는 것을 발견했습니다. 귀하의 질의를 실행했을 때 294 개의 결과를 얻었습니다. 내가 여기서 뭔가를 놓치고 있니? – Sp00kyy

+0

나는 바보. 신경 쓰지 마. 쿼리가 완벽하게 작동했습니다. 당신의 도움을 주셔서 대단히 감사합니다! – Sp00kyy

0

이 방법을 통해 "이 특정 날짜 범위에서이 특정 약속을 갖고 있지 않은 사람들"만 얻을 수 있습니다.

select patient.PatientID from Patient 
except 
select patient.PatientID 
    from Episode 
    join Patient on Episode.PatientID = patient.PatientID 
where Episode.EpisodeDate between '2016-04-01' and '2016-12-15' 
    and Episode.EpisodeTypeID in ('FCB9EAA0-C814-413E-A5FC-48547EF973B7','E422A8FA-839B-44AD-9A60-6973FEF39361','9254B31D-A304-498C-ADE4-F4003997C8FA') 
관련 문제