Estoy tratando de hacer una consulta de selección anidada pero sigo recibiendo el mismo error que dice que cada tabla debe tener su propio alias.

SELECT 
  Sum(SumOfASSIGN_HOURS) AS SumOfSumOfASSIGN_HOURS, 
  Sum(SumOfASSIGN_CHARGE) AS SumOfSumOfASSIGN_CHARGE
FROM (
  SELECT ASSIGNMENT.PROJ_NUM, SUM(ASSIGNMENT.ASSIGN_HOURS) AS SumOfASSIGN_HOURS,
  SUM(ASSIGNMENT.ASSIGN_CHARGE) AS SumOfASSIGN_CHARGE
  FROM (ASSIGNMENT)
  GROUP BY ASSIGNMENT.PROJ_NUM);

Soy nuevo en MYSQL y no puedo entender qué estoy haciendo mal.

0
naauao 27 feb. 2018 a las 22:51

3 respuestas

La mejor respuesta

El problema aquí es que ha creado una tabla derivada (subconsulta) y se le debe dar un alias AS aliasName o cualquier otra cosa. Simplemente proporcione un alias en su subconsulta como a continuación y debería estar bien.

SELECT 
Sum(aliasName.SumOfASSIGN_HOURS) AS SumOfSumOfASSIGN_HOURS,
Sum(aliasName.SumOfASSIGN_CHARGE) AS SumOfSumOfASSIGN_CHARGE
FROM(
SELECT ASSIGNMENT.PROJ_NUM, SUM(ASSIGNMENT.ASSIGN_HOURS) AS
SumOfASSIGN_HOURS,SUM(ASSIGNMENT.ASSIGN_CHARGE) AS SumOfASSIGN_CHARGE
FROM ASSIGNMENT 
GROUP BY ASSIGNMENT.PROJ_NUM
) aliasName;

Puede ver más de esto en la documentación oficial aquí que establece que

Las subconsultas son legales en la cláusula FROM de una declaración SELECT. La sintaxis real es:

SELECCIONAR ... DESDE (subconsulta) [AS] nombre ...

La cláusula de nombre [AS] es obligatoria, porque cada tabla en una cláusula FROM debe tener un nombre. Cualquier columna en la lista de selección de subconsulta debe tener nombres únicos.

0
stackFan 27 feb. 2018 a las 20:12

Debe agregar un nombre en la tabla FROM (seleccionar .....), por ejemplo, agregar un alias simple como T

    SELECT 
    Sum(T.SumOfASSIGN_HOURS) AS SumOfSumOfASSIGN_HOURS, 
    Sum(T.SumOfASSIGN_CHARGE) AS SumOfSumOfASSIGN_CHARGE
  FROM (
    SELECT ASSIGNMENT.PROJ_NUM, SUM(ASSIGNMENT.ASSIGN_HOURS) AS SumOfASSIGN_HOURS,
    SUM(ASSIGNMENT.ASSIGN_CHARGE) AS SumOfASSIGN_CHARGE
    FROM (ASSIGNMENT)
    GROUP BY ASSIGNMENT.PROJ_NUM) T ;
0
scaisEdge 27 feb. 2018 a las 20:06

Al leer su consulta, parece que puede omitir la subconsulta. Su consulta debe verse a continuación:

SELECT PROJ_NUM, SUM(ASSIGN_HOURS) AS SumOfASSIGN_HOURS, 
SUM(ASSIGN_CHARGE) AS SumOfASSIGN_CHARGE                       
FROM ASSIGNMENT
GROUP BY PROJ_NUM
0
isaace 27 feb. 2018 a las 20:04