2016-12-15 2 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, и только эти идентификаторы. Когда я запускаю запрос, он просто удаляет эти встречи и все еще показывает мне каждую другую встречу, которую они имели в этом диапазоне дат.

+0

Запрос не спрашивает, что вы думаете. Он просит * всех * пациентов * и их эпизоды, кроме эпизодов с конкретными идентификаторами. Вы не ставили никаких ограничений на таблицу «Пациент», поэтому все пациенты соответствуют –

ответ

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')