是否可以使用COUNT代替EXISTS?
我有以下查询:
SELECT *
FROM Goals G
WHERE EXISTS (SELECT NULL FROM tfv_home_last6(G.Date, G.Home) WHERE GameNumber <= 6 AND
HomeGoals >= 3)
如果子查询中至少存在一行,而不是返回行,我想指定需要在子查询中返回的行数,例如
SELECT *
FROM Goals G
WHERE ROWCOUNT(*) >= 2 (SELECT NULL FROM tfv_home_last6(G.Date, G.Home) WHERE GameNumber <= 6 AND
HomeGoals >= 3)
我不确定该如何去做?
我正在使用SQL Server 2012。
答案 0 :(得分:2)
你可以像你描述的那样完成子查询:
SELECT *
FROM Goals G
WHERE (SELECT count(*)
FROM tfv_home_last6(G.Date, G.Home)
WHERE GameNumber <= 6 AND HomeGoals >= 3
) > 0;
但是,这需要计算整个计数。 exists
表单更有效,因为它在第一个匹配记录处停止。
在SQL Server 2012中,您还可以使用`cross apply:
SELECT *
FROM Goals G cross apply
(select count(*) as cnt
FROM tfv_home_last6(G.Date, G.Home)
WHERE GameNumber <= 6 AND HomeGoals >= 3
) a
WHERE a.cnt > 0;
我不知道哪个会有更好的性能,where
子句中的相关子查询或者
交叉申请版。