0

作業中 (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', ','))

私は、exists 構文を正しく使用しているかどうか確信が持てません。サブクエリから何を選択すればよいですか? いくつかの異なる組み合わせを試しました。入れたら走らないWHERE d.deviceid NOT EXISTS

解決策(ニコラに感謝):

AND d1.deviceid = d.deviceidExists サブクエリ内に追加します。

4

1 に答える 1

1

違いは、NOT IN クエリは会社に一致し、内部のクエリ仕様に一致しないデバイスを返すことです。

NOT EXIST クエリが記述どおりに機能するには (「記述どおりに動作する」とは、上位のクエリと同じ結果を返すことを意味します)、内部クエリに一致するデバイスが存在することはできません。内部クエリに一致するデバイスがある場合、クエリは結果を返しません。

于 2013-12-12T00:24:37.897 に答える