Как исправить ошибку «Каждая производная таблица должна иметь свой собственный псевдоним» в SQL-запросе - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь найти общее количество голов, забитых командой в футбольных матчах, которые у меня есть. БД имеет следующие поля в таблице результатов,

Fixture_ID(PK), Home_Team, Away_Team, HTgoals, ATgoals.

Когда я запускаю следующий запрос, я получаю «Каждая производная таблица должна иметь свой псевдоним»;

SELECT SUM(goals) goals
  FROM (SELECT SUM(HTgoals) goals
          FROM `results`
          WHERE Home_team = 'Arsenal'
        UNION ALL
        SELECT SUM(ATgoals) goals
          FROM `results`
          WHERE Away_team = 'Arsenal')

Как мне написать запрос так, чтобы результатом была сумма всех голов, забитых «Арсеналом»?

Ответы [ 4 ]

2 голосов
/ 21 апреля 2019

Вы должны назначить псевдоним для дополнительного выбора на FROM, чтобы устранить ошибку:

SELECT SUM(goals) goals 
FROM (
    SELECT SUM(HTgoals) goals FROM `results`  WHERE Home_team = 'Arsenal' 
    UNION ALL
    SELECT SUM(ATgoals) goals FROM `results` WHERE Away_team = 'Arsenal'
) the_alias

Но вы можете написать свой запрос более коротким способом (без дополнительного выбора или UNION ALL - и без псевдонима):

SELECT SUM(CASE WHEN Home_team = 'Arsenal' THEN HTgoals ELSE ATgoals END) goals
FROM `results` 
WHERE Home_team = 'Arsenal' OR Away_team = 'Arsenal'

демо на dbfiddle.uk

0 голосов
/ 21 апреля 2019

Вам нужен псевдоним для вашего подзапроса или производной таблицы, такой как

SELECT SUM(goals) goals 
FROM 
(SELECT SUM(HTgoals) goals FROM `results`  
WHERE Home_team = 'Arsenal' 
UNION ALL  
SELECT SUM(ATgoals) goals FROM `results` 
WHERE Away_team = 'Arsenal') xxx  <--- Here
0 голосов
/ 21 апреля 2019

Вам нужно имя столбца после FROM () Tname

SELECT SUM(goals) goals 
FROM ( 
    SELECT SUM(HTgoals) goals 
    FROM `results`  
    WHERE Home_team = 'Arsenal'

     UNION ALL  
     SELECT SUM(ATgoals) goals 
     FROM `results` 
     WHERE Away_team = 'Arsenal')  T 
0 голосов
/ 21 апреля 2019

вы должны указать псевдоним вашего подзапроса

 SELECT SUM(goals) goals FROM
 (SELECT SUM(HTgoals) goals FROM `results`  WHERE Home_team = 'Arsenal' 
  UNION ALL  
 SELECT SUM(ATgoals) goals FROM `results` WHERE Away_team = 'Arsenal'
 ) a --here a is alias name

но я думаю, что вам не нужен подзапрос, вы можете попробовать, как показано ниже, используя случай, когда

select sum(sum(case when Home_team = 'Arsenal' then HTgoals else 0 end)+
       sum(case when Away_team = 'Arsenal' then ATgoals else 0 end) )
 from results
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...