4

患者が薬を受け取っていないかどうかを検索できるクエリを作成しようとしています。最初、私は次のようなことができると思いました。

INNER JOIN prescript p ON p.id = patient.id AND p.med_id NOT IN (5128)

ここp.idで、patient.idは患者IDを示しp.med_id、薬剤IDを指し5128、クエリで使用されている薬剤です。このクエリの問題は、患者が他の薬を服用している場合、それらが表示されることです。したがって、患者が5128の薬を服用しているだけでなく、別の薬を服用している場合は、それらが表示されます。しかし、私は患者がその薬をまったく持っていない場合にのみ患者を返したいと思っています。ここで注意が必要なのは、このいずれでも患者IDを知ることができないということです。だから私はこれに似た解決策が必要です:

INNER JOIN prescript p ON p.id = patient.id AND (SELECT med_id 
                                                 FROM prescript
                                                 WHERE id = p.pid) NOT IN (5128)

すべてのmed_idを1つの文字列に連結できれば、これは可能だと思っていましたが、クエリビルダーを使用しているため、結合の追加と場所の追加のみに制限されているという問題があります。別名、使用できませんDECLARE

4

3 に答える 3

3

薬を服用していないすべての患者5128...

Select patient.*
from patient 
     left join prescript 
     on patient.id = prescript.patientid
     and prescript.medid = 5128
where 
     prescript.id is null

5128または3000の薬を服用していないすべての患者

Select patient.*
from patient 
     left join prescript 
     on patient.id = prescript.patientid
     and prescript.medid in ( 5128 ,3000)
where 
     prescript.id is null

5128および3000の薬を服用していないすべての患者

Select patient.*
from patient 
     left join prescript 
     on patient.id = prescript.patientid         
     and prescript.medid in ( 5128 ,3000)           
group by patient.id, patient.name
having COUNT(distinct medid)<>2
于 2012-10-10T14:28:27.007 に答える
1

試してみてくださいleft join

left join prescript p on p.id = patient.id and med_id = 5128 where p.id is null
于 2012-10-10T14:30:02.217 に答える
1

ステートメントでNOT EXISTS (SELECT * FROM prescript WHERE id = patient.id AND med_id = 5128)句を使用できます。WHERE

いくつかの薬の少なくとも1つを使用した患者を除外する必要がある場合は、med_id IN (5128, ...)代わりに使用できます。

于 2012-10-10T14:46:55.477 に答える