2017-10-09 99 views
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 

有什麼建議?我已經做了一些挖掘,並沒有打到任何已經工作過的東西,所以想法感謝!

回答

5

你需要括號!

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時總是使用括號。

+0

耶穌基督,你發現比光速更快 – Simon

+0

這將返回0行 - 我知道有人符合m.drugDescription,如'Med1%'(約300),並且約有400人符合'Med2%' - 當Med3進入它時,一切都變得瘋狂。 – jfe042

+1

@ jfe042,戈登是對的。也許你的查詢有其他錯誤,比如其他過濾器。我會在WHERE條款中逐行閱讀,並且每次註釋一個,看看哪一個導致你的悲傷。 – BJones