2011-04-17 63 views
2



我試圖用複合條件中的相關子查詢,但它並沒有返回預期的結果。你可以看看下面的例子,看看爲什麼第一個查詢不能解決,但第二個查詢解決了嗎?SQL Server中,在相關子查詢多個條件

創建表&填入行:

CREATE TABLE TestCase 
(
    Seq INT IDENTITY PRIMARY KEY, 
    ID INT, 
    Name VARCHAR(50) 
) 


INSERT INTO TestCase 
VALUES 
(100, 'MJ'), 
(110, 'MJ'), 
(120, 'AK'), 
(130, 'AK') 

首先查詢:

SELECT A.ID, A.Name FROM TestCase AS A 
WHERE A.ID IN (SELECT ID FROM TestCase WHERE ID <> A.ID AND Name = A.Name) 

(0行(S)的影響)

與第二個查詢存在:

SELECT A.ID, A.Name FROM TestCase AS A 
WHERE EXISTS (SELECT ID FROM TestCase WHERE ID <> A.ID AND Name = A.Name) 

(4列(S)的影響)

據稱,這兩個查詢將返回所有四個行,但第一個也沒有;我不知道爲什麼只有第二個查詢返回了四行。有人可以幫忙嗎?謝謝。

回答

2

第一個查詢返回0記錄的原因是因爲您試圖將行的ID與子查詢返回的行進行匹配,但子查詢與排除所有ID等於當前記錄(A.ID<>ID)的行相關。因此,WHERE IN子句將始終評估爲false。

第二個查詢是不是想匹配A.ID返回的行,但只存在一個不同的ID,但具有相同名稱的列。

+0

+1不得不看幾次真正得到它,但它現在是有道理的。爲什麼我不喜歡(或掌握)否定條件的另一個原因...... – 2011-04-17 07:52:39