在SQL中删除UNION中的重复子查询

时间:2015-12-06 17:57:16

标签: sql sql-server subquery union

我创造了一个足球榜,并且有一个巨大的重复部分,我想摆脱。我有以下表格:

match (matchID, homeTeamID, visitingTeamID)
goals (matchID, playerID, isOwnGoal)

我正在计算目标表中每个匹配的目标,并在SELECT语句中将它们连接到匹配表中(我们称之为MatchWithScoresTable)。在子查询中,我使用两个SELECT语句来计算主场和客场比赛中球队的得分以及UNION中的得分。

问题是这两个SELECT语句都来自完全相同的子查询SELECT(MatchWithScores)。

以下是给您一个想法的查询结构:

SELECT
    ...
FROM( 
    SELECT  
        ...
    FROM (
        SELECT ...  -- MatchWithScores
    ) AS HOME

  UNION ALL 

    SELECT  
        ... 
    FROM (
        SELECT ...  -- MatchWithScores
    ) AS VISITING
) 

我构建这样复杂的查询相对较新,我希望我能够很好地解释问题所在。有没有办法消除这种重复,而不存储匹配表中目标的计算匹配分数?

注意:我的DBMS是SQL Server 2014

1 个答案:

答案 0 :(得分:1)

使用CTE:

with MatchWithScores as (
      select . . .
     )
select . . .
from ((select . . . from MatchWithScores)
      union all
      (select . . . from MatchWithScores)
     ) hv