如何編寫有效的查詢以確定列中的一個或多個值是否爲10+。我知道我可以計算這些值,但這會掃描所有記錄。以下是我迄今爲止:確定是否有任何值滿足條件
SELECT COUNT(*) FROM MyTable WHERE [state] = 12 AND age > 110
我想這個查詢時停止找到的第一人超過110不是掃描整個表。這可能嗎?
如何編寫有效的查詢以確定列中的一個或多個值是否爲10+。我知道我可以計算這些值,但這會掃描所有記錄。以下是我迄今爲止:確定是否有任何值滿足條件
SELECT COUNT(*) FROM MyTable WHERE [state] = 12 AND age > 110
我想這個查詢時停止找到的第一人超過110不是掃描整個表。這可能嗎?
您可以使用子查詢使用此查詢返回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;
TOP
在EXISTS
子查詢中不需要。
所以你希望有標量布爾結果?的存在很有一旦任何行相匹配的條件
DECLARE @Result bit =
(SELECT CASE WHEN EXISTS(SELECT * FROM MyTable WHERE [state] = 12 AND age > 110) THEN 1 ELSE 0 END)
btw,使用'SELECT *'與'EXISTS'中的'SELECT 1'相同http://stackoverflow.com/questions/1597442 /子查詢-使用-存在-1 - 或存在 – Eric
我不知道羯羊的是對你有幫助,但你可以嘗試測試:
例如,您可以要確定的結果集行數爲100 可以使用100強的基地聲明。 如果信號結果行超過100,那麼@@ ROWCOUNT將爲真。
SELECT TOP 100 FROM MyTable WHERE [state] = 12 AND age > 110
IF @@ROWCOUNT=100
PRINT 'True'
ELSE
PRINT 'Flase'
因此,如果計數停止,每次計數爲1,否? – scsimon
@scsimon我只想知道州12是否有超過110的人。我不需要計數。 – Luke101
然後只需選擇1或使用相同的where子句選擇'true'。這將爲您節省聚合費用。你可能想與EXISTS – scsimon