2016-12-05 54 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'