如何编写有效的查询以确定列中的一个或多个值是否为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