2011-12-02 72 views
0

在where子句下面NOT EXIST的確切含義是什麼,請幫助我理解。在SQL語句中使用NOT EXIST

WHERE 
     NOT EXISTS 
     (
      SELECT 
       'z' 
      FROM 
       Mytemptable 
      WHERE 
       Mytemptable.Date = @PositionDate AND 
       Mytemptable.PurchaseLotId = PurchaseTable.PurchaseLotId 
     ) 
+0

您可以發佈第一部分查詢嗎? –

+0

WHERE [NOT] <此查詢是否返回任何記錄?>'=>'WHERE <此查詢不返回任何記錄>' – MatBailie

+0

括號內的位是[相關子查詢](http://en.wikipedia.org/ wiki/Correlated_subquery) - 必須在外部查詢中引用PurchaseTable。 –

回答

5

所討論的關係運算符是又名antijoin半差。大多數SQL產品缺少明確的半差異運算符或關鍵字,並且使用NOT EXISTS是衆多解決方法之一。請注意,文本字面值z可以替換爲任何有效的文字,列或*,而不會改變行爲。

1

它指定不存在從所述嵌套的子查詢的結果,即,只有不產生在子查詢中的任何結果列將包括在該超級查詢的結果。

1

[NOT] EXISTS測試是否存在行。在您的查詢中,該select語句將返回行或不返回(NULL)。如果您的查詢沒有返回行,那麼您的WHERE子句之前的任何內容都將被評估。

1

NOT EXISTS表示沒有任何子查詢返回。 EXISTS爲相反的意思是「由子查詢返回的一個或多個行」

SELECT * FROM Users as Homeless WHERE NOT EXISTS 
     (SELECT * FROM Addresses WHERE Addresses.userId = Users.userId) 
1

具體而言,它會檢查您的temptable中是否存在與指定的@date值相匹配的記錄,該值與主查詢中的PurchaseTable.PurchaseLotId值相匹配。 (使用'z'是無關緊要的,因爲它只是測試是否存在。)