Si obtiene "ERROR 1250 (42000):la tabla '...' de uno de los SELECT no se puede usar en la cláusula ORDER", probablemente se deba a que está calificando un nombre de columna con su nombre de tabla cuando usa un operador como UNION
, INTERSECT
, o EXCEPT
en MariaDB.
Para solucionar esto, 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 ORDER clause
En este caso 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).
Hacer referencia a tablas como esta no funciona al ordenar los resultados de un UNION
operación en MariaDB. Lo mismo ocurre cuando se ordenan los resultados de INTERSECT
operador y el EXCEPT
operador.
Solución 1
Una forma de solucionar este problema 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;
Solución 2
Otra forma de solucionarlo es usar un alias para la columna:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Con esta opción, asignamos un alias a la columna y luego hacemos referencia a ese alias en el ORDER BY
cláusula.