查询未返回正确的结果

时间:2016-12-15 11:46:36

标签: sql sql-server sql-server-2008-r2

我正在尝试对没有特定类型约会且只有这种类型的约会的人进行查询,但是当我运行查询时,我仍然会得到大量的结果。

我只想要在这个特定日期范围内没有这个预约的人。 到目前为止,这是我的查询。

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。 当我运行查询时,它只是删除这些约会,并仍然显示他们在此日期范围内的每个其他约会。

2 个答案:

答案 0 :(得分:3)

您可以使用not existsnot 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'
                  );

您的查询正在做一些完全不同的事情。它计算的不是那三个剧集的数量。根本不计算患者。

答案 1 :(得分:0)

通过这种方式,只有那些在特定日期范围内没有获得此约会的人才能获得#34;

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