これはこれに関連する質問ですが、INの代わりにEXISTSを使用しています
SELECT distinct Patient.patientid
FROM Patient P
JOIN patientICD pICD
ON P.patientid = pICD.patientid
AND P.admissiondate = pICD.admissiondate
AND P.dischargedate = pICD.dischargedate
JOIN tblICD
ON pICD.primarycode = tblICD.ICD_ID
WHERE tblICD.descrip LIKE N'%diabetes%'
AND patient.patientID not in (
SELECT distinct Patient.patientid
FROM Patient P
JOIN patientICD pICD
ON P.patientid = pICD.patientid
AND P.admissiondate = pICD.admissiondate
AND P.dischargedate = pICD.dischargedate
JOIN tblICD ON pICD.primarycode = tblICD.ICD_ID
WHERE tblICD.icd_id =N'25000'
)
このクエリは正常に動作しますが、選択式に別のフィールドを追加しようとすると、使用する必要がWHERE EXISTS
あり、次のクエリは 0 の結果を返しますが、上記のクエリは 130 を返します。結果に tblicd.icd_id フィールドを追加しようとしています。最初のクエリから設定しましたが、何か間違っています。
SELECT DISTINCT Patient.patientid, tblicd.icd_id
FROM Patient
INNER JOIN patientICD
ON Patient.patientid = patientICD.patientid
AND Patient.admissiondate = patientICD.admissiondate
AND Patient.dischargedate = patientICD.dischargedate
INNER JOIN tblICD
ON patientICD.primarycode = tblICD.ICD_ID
WHERE tblICD.descrip LIKE N'%TextOfNote%'
and not exists (
SELECT DISTINCT Patient.patientid, tblicd.icd_id
FROM Patient
INNER JOIN patientICD
ON Patient.patientid = patientICD.patientid
AND Patient.admissiondate = patientICD.admissiondate
AND Patient.dischargedate = patientICD.dischargedate
INNER JOIN tblICD
ON patientICD.primarycode = tblICD.ICD_ID
WHERE tblICD.icd_id = N'25000'
)