繁体   English   中英

NOT IN查询不起作用,SQL Server 2008

[英]NOT IN query not working, SQL Server 2008

在此处输入图片说明

查询的第一部分在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

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

and Patient.patientid not in

你是说写这个吗

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'

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

我相信您需要指定not in其中的列。 因此,根据您的脚本,我想您需要and Patient.patientid not in

纯粹是风格上的:您可以“挤出”耐心ICD * 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字段应该是数字。 {admissiondate,dischargedate}对也应建模。 可能是通过使用diagnostic_id或identity_id。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM