0

在此处输入图像描述

运行前查询的第一部分not in给了我一个包含 100 条记录的列表。第二个查询运行并给我一个包含 75 条记录的列表。我尝试使用的查询not in是获取一个结果集中的记录,而不是另一个结果集中的记录。我得到的错误是incorrect syntax near the word not.

SELECT distinct  Patient.patientid
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'%diabetes%') and  not in
(
SELECT    distinct Patient.patientid
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 LIKE N'25000')
) 

是否允许使用 编写查询expression AND NOT IN (select query

4

5 回答 5

5

您需要指定第二个查询中没有的字段

and Patient.patientid not in
于 2012-06-20T20:32:31.980 回答
2

你的意思是写这个吗?

WHERE     (tblICD.descrip LIKE N'%diabetes%') and Patient.patientid not in

更新

是否有可能将整个事情改写成这样?

SELECT distinct  Patient.patientid
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'%diabetes%' AND tblICD.icd_id NOT LIKE N'25000'
于 2012-06-20T20:32:31.360 回答
1

您在 NOT 之前忘记了一个字段。

于 2012-06-20T20:33:50.140 回答
1

我相信您需要指定not in正在查看的列。所以根据你的剧本,我想你会想要and Patient.patientid not in

于 2012-06-20T20:40:01.677 回答
1

纯粹的风格:您可以“挤出” PatientICD*tblICD 产品,并将其放入 CTE,并引用两次,例如:(未经测试)

WITH zzz AS (
        SELECT pic.patientid , pic.admissiondate , pic.dischargedate
        , tab.ICD_ID , tab.descrip
        FROM patientICD pic
        JOIN tblICD tab ON pic.primarycode = tab.ICD_ID
        )
SELECT DISTINCT p.patientid
FROM  Patient p
JOIN zzz one ON one.patientid = p.patientid
             AND one.admissiondate = p.admissiondate 
             AND one.dischargedate = p.dischargedate 
WHERE one.descrip LIKE N'%diabetes%'
AND p.patientid NOT IN (
        SELECT two.patientid 
        FROM zzz two
        WHERE two.admissiondate = p.admissiondate
        AND two.dischargedate = p.dischargedate
        AND two.icd_id LIKE N'25000'
        );

注意:我不喜欢LIKE N'25000'. 我认为完全匹配会很好。icd_id-field 应该是数字,可能。{admissiondate,dischargedate} 对也应该建模;可能通过使用诊断 ID 或事件 ID。

于 2012-06-20T21:16:13.053 回答