Si obtiene el error "1054 (42S22):Columna desconocida '...' en 'cláusula de orden'" al usar UNION
cláusula en MySQL, podría deberse a que está tratando de hacer referencia a una columna con alias por su nombre de columna.
Al usar UNION
cláusula en MySQL, si una columna tiene un alias, entonces debe usar ese alias en cualquier ORDER BY
cláusula que hace referencia a esa columna.
Entonces, para corregir el error, asegúrese de hacer referencia a la columna por su alias. Alternativamente, puede eliminar el alias y hacer referencia al nombre de la columna directamente.
Ejemplo de error
Aquí hay un ejemplo de código que produce el error:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultado:
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Aquí traté de ordenar los resultados por TeacherName
columna, pero esa columna tiene un alias. El hecho de que no usé el alias en ORDER BY
cláusula fue suficiente para producir el error.
Solución 1
Una forma de solucionar este problema es usar el 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 | +--------+
Eso resolvió el problema.
Solución 2
Otra forma de hacerlo es eliminar el alias por completo:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultado:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+