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