Mysql
 sql >> Database >  >> RDS >> Mysql

Risolto il problema con "ERRORE 1054 (42S22):colonna sconosciuta"..." in "clausola di ordine" quando si utilizza UNION in MySQL

Se ricevi l'errore "1054 (42S22):Colonna sconosciuta '...' in 'clausola di ordine'" quando usi UNION clausola in MySQL, potrebbe essere perché stai cercando di fare riferimento a una colonna alias con il suo nome di colonna.

Quando si utilizza UNION clausola in MySQL, se una colonna ha un alias, è necessario utilizzare quell'alias in qualsiasi ORDER BY clausola che fa riferimento a quella colonna.

Quindi, per correggere l'errore, assicurati di fare riferimento alla colonna con il suo alias. In alternativa, puoi rimuovere l'alias e fare riferimento direttamente al nome della colonna.

Esempio di errore

Ecco un esempio di codice che produce l'errore:

(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;

Risultato:

ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'

Qui ho cercato di ordinare i risultati per TeacherName colonna, ma quella colonna ha un alias. Il fatto che non ho usato l'alias in ORDER BY è stata sufficiente la clausola per produrre l'errore.

Soluzione 1

Un modo per risolvere questo problema è utilizzare l'alias in ORDER BY clausola:

(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;

Risultato:

+--------+
| t      |
+--------+
| Ben    |
| Bill   |
| Cathy  |
| Ein    |
| Faye   |
| Jet    |
| Spike  |
| Warren |
+--------+

Questo ha risolto il problema.

Soluzione 2

Un altro modo per farlo è rimuovere del tutto l'alias:

(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;

Risultato:

+-------------+
| TeacherName |
+-------------+
| Ben         |
| Bill        |
| Cathy       |
| Ein         |
| Faye        |
| Jet         |
| Spike       |
| Warren      |
+-------------+