我创造了一个足球榜,并且有一个巨大的重复部分,我想摆脱。我有以下表格:
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
答案 0 :(得分:1)
使用CTE:
with MatchWithScores as (
select . . .
)
select . . .
from ((select . . . from MatchWithScores)
union all
(select . . . from MatchWithScores)
) hv