Se ricevi "ERROR 1250 (42000):la tabella '...' da uno dei SELECT non può essere utilizzata nella clausola ORDER", probabilmente è perché stai qualificando un nome di colonna con il suo nome di tabella quando usi un operatore come UNION
, INTERSECT
o EXCEPT
in MariaDB.
Per risolvere il problema, rimuovi il nome della tabella o utilizza un alias di colonna.
Esempio di errore
Ecco un esempio di codice che produce l'errore:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Risultato:
ERROR 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in ORDER clause
In questo caso ho provato a ordinare i risultati in base al TeacherName
colonna, ma ho qualificato quella colonna con il nome della tabella (ho usato Teachers.TeacherName
per fare riferimento al nome della colonna).
Tabelle di riferimento come questa non funzionano quando si ordinano i risultati di un UNION
operazione in MariaDB. Lo stesso vale quando si ordinano i risultati di INTERSECT
operatore e EXCEPT
operatore.
Soluzione 1
Un modo per risolvere questo problema è rimuovere il nome della tabella da ORDER BY
clausola:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Soluzione 2
Un altro modo per risolverlo è utilizzare un alias per la colonna:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Con questa opzione, assegniamo un alias alla colonna, quindi facciamo riferimento a tale alias in ORDER BY
clausola.