sql >> Base de Datos >  >> RDS >> Mysql

Corrija el "ERROR 1250 (42000):la tabla '...' de uno de los SELECT no se puede usar en la cláusula ORDER global" cuando se usa UNION en MySQL

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 |
+--------+