在 SQL 中摆脱 UNION 中的重复子查询
Getting rid of duplicate subqueries in UNION in SQL
我生成了一个足球排行榜,其中有一个巨大的重复部分我想删除。我有以下 tables:
match (matchID, homeTeamID, visitingTeamID)
goals (matchID, playerID, isOwnGoal)
我正在计算目标 table 中每场比赛的进球数,并在 SELECT 语句中加入比赛 table(我们称之为 MatchWithScoresTable)。在子查询中,我使用两个 SELECT 语句来计算球队在主客场比赛中的得分,并将它们合二为一。
问题是这两个 SELECT 语句都 SELECT 来自完全相同的子查询 (MatchWithScores)。
下面是查询的结构,供您参考:
SELECT
...
FROM(
SELECT
...
FROM (
SELECT ... -- MatchWithScores
) AS HOME
UNION ALL
SELECT
...
FROM (
SELECT ... -- MatchWithScores
) AS VISITING
)
我对构建如此复杂的查询还比较陌生,希望我能充分解释问题所在。有没有一种方法可以在不存储比赛进球的计算得分的情况下消除这种重复 table?
注意:我的 DBMS 是 SQL Server 2014
使用 CTE:
with MatchWithScores as (
select . . .
)
select . . .
from ((select . . . from MatchWithScores)
union all
(select . . . from MatchWithScores)
) hv
我生成了一个足球排行榜,其中有一个巨大的重复部分我想删除。我有以下 tables:
match (matchID, homeTeamID, visitingTeamID)
goals (matchID, playerID, isOwnGoal)
我正在计算目标 table 中每场比赛的进球数,并在 SELECT 语句中加入比赛 table(我们称之为 MatchWithScoresTable)。在子查询中,我使用两个 SELECT 语句来计算球队在主客场比赛中的得分,并将它们合二为一。
问题是这两个 SELECT 语句都 SELECT 来自完全相同的子查询 (MatchWithScores)。
下面是查询的结构,供您参考:
SELECT
...
FROM(
SELECT
...
FROM (
SELECT ... -- MatchWithScores
) AS HOME
UNION ALL
SELECT
...
FROM (
SELECT ... -- MatchWithScores
) AS VISITING
)
我对构建如此复杂的查询还比较陌生,希望我能充分解释问题所在。有没有一种方法可以在不存储比赛进球的计算得分的情况下消除这种重复 table?
注意:我的 DBMS 是 SQL Server 2014
使用 CTE:
with MatchWithScores as (
select . . .
)
select . . .
from ((select . . . from MatchWithScores)
union all
(select . . . from MatchWithScores)
) hv