0

こんにちは、なぜ異なる結果が得られるのかわかりません。誰かが私の間違いを教えてもらえますか?

このクエリは 2 行のレコードを返します

SELECT Prod.bintProductRef FROM Prod_ProfileTbl Prod     
WHERE   Prod.intDepartmentRef =4  

bintProductRef
--------------------
164475
164476

このクエリは 1 行のレコードを返します

SELECT Prod.bintProductRef FROM Prod_ProfileTbl Prod    
        WHERE  intCatRef = 132

bintProductRef
--------------------
164475

NOT EXISTS、上記の 2 つのクエリを組み合わせると、164476 が返されるはずですが、出力はありません。

SELECT Prod.bintProductRef FROM Prod_ProfileTbl Prod     
      WHERE   Prod.intDepartmentRef =4  
      AND NOT EXISTS (      
        SELECT Prod.bintProductRef FROM Prod_ProfileTbl Prod    
        WHERE  intCatRef = 132)

NOT IN、これは 1 行のデータを返します。これは 164476 であり、これは正しいです。

 SELECT Prod.bintProductRef FROM Prod_ProfileTbl Prod     
      WHERE  Prod.intDepartmentRef =4  
       AND Prod.bintProductRef NOT IN (      
        SELECT  Prod.bintProductRef FROM Prod_ProfileTbl Prod    
        WHERE  intCatRef = 132)
4

3 に答える 3

0

NOT EXISTS (...) は、括弧内に何も返されない場合にのみ true になることを意味します。あなたが示したように、行を返すため、NOT EXISTS は false であるため、AND は false であり、行が返されません。

于 2013-10-29T06:36:37.720 に答える