Sql 有效地检查记录集中是否存在多行
我使用的是SQLServer2008R2,我试图找到一种有效的方法来测试一个表中是否存在多个与条件匹配的行 做这件事的天真方法是计数:Sql 有效地检查记录集中是否存在多行,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我使用的是SQLServer2008R2,我试图找到一种有效的方法来测试一个表中是否存在多个与条件匹配的行 做这件事的天真方法是计数: IF ( SELECT COUNT(*) FROM Table WHERE Column = <something> ) > 1 BEGIN ... END 但这需要实际计算一个计数,这是浪费。我只想测试一个以上 我唯一想到的是排名前2位的人数: IF ( SELE
IF ( SELECT COUNT(*)
FROM Table
WHERE Column = <something>
) > 1 BEGIN
...
END
但这需要实际计算一个计数,这是浪费。我只想测试一个以上
我唯一想到的是排名前2位的人数:
IF ( SELECT COUNT(*)
FROM ( SELECT TOP 2 0 x
FROM Table
WHERE Column = <something>
) x
) > 1 BEGIN
...
END
这是笨重的,需要对文档进行注释。还有更简洁的方法吗?如果表中有一个PK,您正在检查>1行,那么可以嵌套另一个EXISTS子句。不确定这是否更快,但它实现了您的记录结果。例如,假设具有PK命名ID的站点表可以具有零到多个具有PK命名ID的位置表记录,则位置具有FK StationID,并且您希望找到至少具有两个位置的站点:
SELECT s.ID
FROM Station s
WHERE EXISTS (
SELECT 1
FROM Location L
WHERE L.StationID = s.ID
AND EXISTS (
SELECT 1
FROM Location L2
WHERE L2.StationID = L.StationID
AND L2.ID <> L.ID
)
)
我有以下解决方案与大家分享,这可能是更轻的性能。
我假设您正在尝试获取第一条记录,并在确保SQL选择返回单个记录后对其进行处理。因此,继续并获取它,但一旦这样做,请立即尝试获取下一条记录,如果成功,您就会知道存在多条记录,并且可以启动异常处理逻辑。否则,您仍然可以处理单个记录。不能超过一列。多行。如中所示,表中是否有2行与我的搜索条件匹配。SQL Server具有有效的语法来检查是否存在任何行-use EXISTS。我正在寻找一个表达式来检查表是否有多个,而不计算整个集合的计数,这是不必要的昂贵。>>但这需要实际计算计数,这是浪费我不关心计数操作本身。它是实际扫描行的IO。假设最坏的情况是没有索引的列,我想要一个完整的表扫描,在它到达第二行后退出。@Pete好吧,根据我所看到的计划,在前2行计数更有效,因为它会短路。此外,在一个无关的问题上投70票仍然是无关的。这在一个完整的命令式过程解决方案C、Java、PHP中是可以的,但在一个集合范式SQL中不是很好,请不要提及游标/rbar。如果你的应用程序是这样工作的,它一定有一个可怕的DB往返效率