Ваш запрос кажется неполным, и вы должны использовать UNION ALL
, чтобы получить полную сумму (если 2 или более игроков имеют одинаковые очки UNION DISTINCT
исключит эти строки):
SELECT
SUM( points )
FROM (
SELECT
points
FROM player
JOIN team ON player.full_name = team.player1
WHERE team.team_id = 8
AND week = 9
UNION ALL
SELECT
points
FROM player
JOIN team ON player.full_name = team.player2
WHERE team.team_id = 8
AND week = 9
UNION ALL
SELECT
points
FROM player
JOIN team ON player.full_name = team.player3
WHERE team.team_id = 8
AND week = 9
UNION ALL
SELECT
points
FROM player
JOIN team ON player.full_name = team.player4
WHERE team.team_id = 8
) d
, но яПолагайте, что ваш командный стол нуждается в изменениях для достижения большей эффективности
Обратите внимание, что использование UNION
= UNION DISTINCT
, т. е. "отличный" предполагается, если опущено.
Это может быть более эффективным:
SELECT
SUM( player.points )
FROM player
WHERE player.full_name IN (
SELECT distinct
case when cj.n = 1 then team.player1
when cj.n = 2 then team.player2
when cj.n = 3 then team.player3
when cj.n = 4 then team.player4
end
FROM team
cross join (
select 1 as n union all
select 2 as n union all
select 3 as n union all
select 4 as n
) cj
WHERE team.team_id = 8
)
AND player.week = 9 ;