2
我正在查询显示某些类型药物的患者。我列出了我正在寻找的几种不同的药物 - 我期待着看看数据库中是否有任何患者开具了处方药,这些药物是在今天或之后结束的。多个LIKE子句SQL
药物按名称出现在表格中,所以我试图用LIKE
找到它们。但是一旦我添加了一个以上的药物,我的查询就会引起很多重复(从362行到超过32K行返回),并忽略了在药物后的WHERE
子句中的所有项目。
因此,这里是我已经试过:
select p.PatientID,
p.FirstName+' '+p.LastName as 'PatientName',
m.endDate,
m.Prescriber,
m.drugDescription as 'DrugName'
from Medications m
join Patients p on p.RCDID = m.PTID
where m.historyRecord = 'N'
and m.[current] = 'Y'
and m.drugDescription like 'Med1%'
or m.drugDescription like 'Med2%'
or m.drugDescription like 'Med3%'
and m.endDate >= GETDATE()
这让我在30K副本 - 和转发病人不符合WHERE
子句中以下条件:
where m.historyRecord = 'N'
and m.[current] = 'Y'
and m.endDate >= GETDATE()
(而这个病人实际上只出现在21行的数据库中 - Med2在21个不同的时间规定 - 所以它完全脱离轨道)
我tr灭蝇灯子查询也:
select p.PatientID,
p.FirstName+' '+p.LastName as 'PatientName',
m.endDate,
m.Prescriber,
m.drugDescription as 'DrugName'
from Medications m
join Patients p on p.RCDID = m.PTID
where m.historyRecord = 'N'
and m.[current] = 'Y'
and exists (select 1 from Medications m1
where m1.PTID = m.PTID
and m1.drugDescription like 'Med1%'
or m1.drugDescription like 'Med2%'
or m1.drugDescription like 'Med3%'
and m1.endDate >= GETDATE())
这就是我在寻找:
PatientID | PatientName | endDate | Prescriber | DrugName
1 | John Smith | 2017-10-22| Dr. Jones | Med1
1 | John Smith | 2017-10-22| Dr. Jones | Med3
2 | Mary Doe | 2017-11-01| Dr. Johnson| Med2
3 | Steve Doe | 2017-11-15| Dr. Smith | Med1
有什么建议?我已经做了一些挖掘,并没有打到任何已经工作过的东西,所以想法感谢!
耶稣基督,你发现比光速更快 – Simon
这将返回0行 - 我知道有人符合m.drugDescription,如'Med1%'(约300),并且约有400人符合'Med2%' - 当Med3进入它时,一切都变得疯狂。 – jfe042
@ jfe042,戈登是对的。也许你的查询有其他错误,比如其他过滤器。我会在WHERE条款中逐行阅读,并且每次注释一个,看看哪一个导致你的悲伤。 – BJones