2016-12-05 40 views
0

如何編寫有效的查詢以確定列中的一個或多個值是否爲10+。我知道我可以計算這些值,但這會掃描所有記錄。以下是我迄今爲止:確定是否有任何值滿足條件

SELECT COUNT(*) FROM MyTable WHERE [state] = 12 AND age > 110 

我想這個查詢時停止找到的第一人超過110不是掃描整個表。這可能嗎?

+0

因此,如果計數停止,每次計數爲1,否? – scsimon

+0

@scsimon我只想知道州12是否有超過110的人。我不需要計數。 – Luke101

+0

然後只需選擇1或使用相同的where子句選擇'true'。這將爲您節省聚合費用。你可能想與EXISTS – scsimon

回答

3

您可以使用子查詢使用此查詢返回1或沒有行:

SELECT TOP 1 1 as row_exists 
FROM MyTable 
WHERE [state] = 12 AND age > 110; 

您可以使用子查詢1或NULL使用返回這是一個子查詢:

SELECT (SELECT TOP 1 1 FROM MyTable WHERE [state] = 12 AND age > 110 
     ) as row_exists; 

可以使用將此放入T-SQL:

IF (EXISTS (SELECT 1 FROM MyTable WHERE [state] = 12 AND age > 110)) 
BEGIN 
    . . . 
END; 

TOPEXISTS子查詢中不需要。

2

所以你希望有標量布爾結果?的存在很有一旦任何行相匹配的條件

DECLARE @Result bit = 
    (SELECT CASE WHEN EXISTS(SELECT * FROM MyTable WHERE [state] = 12 AND age > 110) THEN 1 ELSE 0 END) 
+1

btw,使用'SELECT *'與'EXISTS'中的'SELECT 1'相同http://stackoverflow.com/questions/1597442 /子查詢-使用-存在-1 - 或存在 – Eric

0

我不知道羯羊的是對你有幫助,但你可以嘗試測試:

例如,您可以要確定的結果集行數爲100 可以使用100強的基地聲明。 如果信號結果行超過100,那麼@@ ROWCOUNT將爲真。

SELECT TOP 100 FROM MyTable WHERE [state] = 12 AND age > 110 
IF @@ROWCOUNT=100 
    PRINT 'True' 
ELSE 
    PRINT 'Flase'