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