簡體   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