特定の種類の投薬を受けている患者を表示するためのクエリを作成しています。私は、私が探しているいくつかの異なる薬のリストを持っています - データベースに、今日の日付以降に終了日のあるこれらの薬の処方箋を持っている患者がいるかどうかを調べたいと考えています。複数のLIKE句SQL
薬は表の名前で表示されるので、私はLIKE
を使用してそれらを見つけることを試みています。しかし、一度複数のmedを追加すると、私のクエリは多くの重複(362行から32K行に返されます)を引き出し、薬の後の私のWHERE
句のすべての項目を無視します。
where m.historyRecord = 'N'
and m.[current] = 'Y'
and m.endDate >= GETDATE()
(: - と繰り返す患者は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以上の重複を与える:だからここ
は、私が試したものですこの患者は実際に21行のデータベースにのみ現れます - Med2は21回の異なる時間に処方されています - したがって、それは完全に外れています)
また、サブクエリをIED:
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
任意の提案:
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())
これは私が探しているのですか?私はいくつかの掘り出し物をしてきましたが、まだ働いているものは全くヒットしていないので、アイデアは高く評価されます!
イエスキリスト、あなたは光の速度よりも速くそれをキャッチしました – Simon
これは0行を返します - 私は知っている "Med1%"(約300)のようなm.drugDescriptionと約400人以上「Med2%」 - Med3がすべてのことを忘れてしまう時です。 – jfe042
@ jfe042、ゴードンはそうです。おそらく、他のフィルタのようなクエリには別の問題があります。私は 'WHERE'節で一行ずつ行を並べて、あなたが悲しみの原因となっているものを一度に一つずつコメントします。 – BJones