gpt4 book ai didi

sql - 多个 LIKE 子句 SQL

转载 作者:行者123 更新时间:2023-12-03 01:59:04 25 4
gpt4 key购买 nike

我正在处理一个查询,以显示正在服用某些类型药物的患者。我有一份我正在寻找的几种不同药物的 list - 我正在查看数据库中是否有任何患者拥有这些药物的处方,其截止日期在今天或之后。

这些药物按名称显示在表格中,因此我尝试使用 LIKE 查找它们。但是,一旦我添加多个 med,我的查询就会崩溃并提取大量重复项(从 362 行返回到超过 32K 行),并忽略 meds 之后的 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 次不同的处方——所以它完全偏离了轨道)

我也尝试了子查询:

    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

有什么建议吗?我已经做了一些挖掘,但还没有找到任何有效的方法,所以非常感谢您的想法!

最佳答案

你需要括号!

where m.historyRecord = 'N' and
m.[current] = 'Y' and
m.endDate >= GETDATE() and
(m.drugDescription like 'Med1%' or
m.drugDescription like 'Med2%' or
m.drugDescription like 'Med3%'
)

如果您正在学习 SQL,请在混合 andor 时始终使用括号。

关于sql - 多个 LIKE 子句 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46655657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com