2017-10-09 10 views
2

特定の種類の投薬を受けている患者を表示するためのクエリを作成しています。私は、私が探しているいくつかの異なる薬のリストを持っています - データベースに、今日の日付以降に終了日のあるこれらの薬の処方箋を持っている患者がいるかどうかを調べたいと考えています。複数の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()) 

これは私が探しているのですか?私はいくつかの掘り出し物をしてきましたが、まだ働いているものは全くヒットしていないので、アイデアは高く評価されます!

答えて

5

括弧が必要です。あなたがSQLを学習している場合はandorを混合する際

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

は、常に括弧を使用します。

+0

イエスキリスト、あなたは光の速度よりも速くそれをキャッチしました – Simon

+0

これは0行を返します - 私は知っている "Med1%"(約300)のようなm.drugDescriptionと約400人以上「Med2%」 - Med3がすべてのことを忘れてしまう時です。 – jfe042

+1

@ jfe042、ゴードンはそうです。おそらく、他のフィルタのようなクエリには別の問題があります。私は 'WHERE'節で一行ずつ行を並べて、あなたが悲しみの原因となっているものを一度に一つずつコメントします。 – BJones