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

Arreglar "ERROR 1054 (42S22):Columna desconocida '...' en 'cláusula de orden' al usar UNION en MySQL

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