Si recibe un error que dice "ERROR 1250 (42000):la tabla '...' de uno de los SELECT no se puede usar en la cláusula ORDER global" al usar UNION
cláusula en una consulta de MySQL, probablemente se deba a que está calificando un nombre de columna con su nombre de tabla.
Esto no funciona en MySQL.
Para solucionar este problema, elimine el nombre de la tabla o use un alias de columna.
Ejemplo de error
Aquí hay un ejemplo de código que produce el error:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Resultado:
ERROR 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in global ORDER clause
Aquí traté de ordenar los resultados por TeacherName
columna, pero califiqué esa columna con el nombre de la tabla (utilicé Teachers.TeacherName
para hacer referencia al nombre de la columna).
MySQL no permite que se haga referencia a las tablas de esta manera al ordenar los resultados de un UNION
operación.
Solución 1
Una forma de solucionar esto es eliminar el nombre de la tabla de ORDER BY
cláusula:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultado:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+
Solución 2
Si la opción anterior no es adecuada, otra forma de solucionar el problema es usar un alias. En otras palabras, asigne un alias a la columna, luego haga referencia a ese alias en ORDER BY
cláusula:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Resultado:
+--------+ | t | +--------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +--------+