有效地检查记录集中是否存在多行

时间:2013-03-13 15:06:43

标签: sql sql-server sql-server-2008-r2

我正在使用SQL Server 2008 R2,并且我正在尝试找到一种有效的方法来测试匹配条件的表中是否存在多于一行。

这种天真的方式是COUNT:

IF  (   SELECT  COUNT(*)
        FROM    Table
        WHERE   Column  = <something>
    )   > 1 BEGIN
    ...
END

但这需要实际计算COUNT,这是浪费。我只想测试1个以上。

我唯一想到的是TOP 2上的COUNT:

IF  (   SELECT  COUNT(*)
        FROM    (   SELECT  TOP 2   0   x
                    FROM    Table
                    WHERE   Column  = <something>
                )   x
    )   > 1 BEGIN
    ...
END

这很笨重,需要对文档进行评论。有更简洁的方法吗?

2 个答案:

答案 0 :(得分:1)

如果您在表中检查了&gt; 1行的PK,则可以嵌套另一个EXISTS子句。不确定这是否更快,但它可以实现您的记录结果。例如,假设具有名为ID的PK的Station表可以具有名为ID的PK的零到多位置表记录,Location具有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
    )
)

答案 1 :(得分:0)

我有以下解决方案可以分享,这可能会在性能上更轻松。 我想你一旦确定你的SQL选择返回一条记录,你就试图获取第一条记录并处理它。因此,继续并获取它,但是一旦这样做,尝试立即获取下一条记录,如果成功,您知道存在多条记录,并且您可以启动异常处理逻辑。否则,您仍然可以处理您的单个记录。