0

Working (NOT IN) 检索 3 行:

select DISTINCT d.* from Device d , Company c3
WHERE d.deviceid NOT IN
(
    Select d1.deviceid from Device d1, Clone x1 
    WHERE  d1.deviceid =  x1.deviceID 
    AND  
    (
        x1.XPath = 'hi' 
        OR x1.XPath = 'bye' 
    )
    AND 
    ( 
        EXISTS ( select * from (SELECT * FROM [dbo].[Split] ('T130SF0W2050', ',')) as s 
        WHERE x1.Value like '%' + s.items + '%' )
    ) 
)  
AND  
d.companyid = c3.companyid and c3.companynumber in (SELECT * FROM [dbo].[Split] ('00223200', ','))

不工作(不存在):

select DISTINCT d.* from Device d , Company c3
WHERE  NOT EXISTS
(Select * from Device d1, Clone x1 
    WHERE  d1.deviceid =  x1.deviceID 
    AND  
    (
        x1.XPath = 'hi' 
        OR x1.XPath = 'bye' 
    )
    AND 
    ( 
        EXISTS ( select * from (SELECT * FROM [dbo].[Split] ('T130SF0W2050', ',')) as s 
        WHERE x1.Value like '%' + s.items + '%' )
    )

)  
AND  
d.companyid = c3.companyid and c3.companynumber in (SELECT * FROM [dbo].[Split] ('00223200', ','))

我不确定我使用的存在语法是否正确,我应该从子查询中选择什么?我尝试了几种不同的组合。如果我把它不会运行WHERE d.deviceid NOT EXISTS

解决方案(感谢 Nikola):

AND d1.deviceid = d.deviceid在 Exists 子查询中添加。

4

1 回答 1

1

不同之处在于 NOT IN 查询返回与公司匹配但与内部查询规范不匹配的设备。

为了使 NOT EXIST 查询按书面形式工作(其中“按书面工作”是指返回与顶部查询相同的结果),不能有任何与内部查询匹配的设备。如果任何设备与内部查询完全匹配,则查询不会返回任何结果。

于 2013-12-12T00:24:37.897 回答