是否可以使用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.
最佳答案 你可以像你描述的那样完成子查询:
SELECT *
FROM Goals G
WHERE (SELECT count(*)
FROM tfv_home_last6(G.Date, G.Home)
WHERE GameNumber <= 6 AND HomeGoals >= 3
) > 0;
但是,这需要计算整个计数.存在形式更有效,因为它在第一个匹配记录处停止.
在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子句中的相关子查询或者
交叉应用版本.