Om du får felmeddelandet "ERROR 1054 (42S22):Okänd kolumn "colname" i "order clause" ” i MariaDB kan det vara så att du försöker referera till en aliasad kolumn med dess kolumnnamn.
Detta är ett vanligt fel när du kör frågor som sammanfogar två eller flera tabeller. Det kan också hända när du använder operatorer som UNION
, INTERSECT
och EXCEPT
.
I allmänhet, om en kolumn har ett alias, måste du använda det aliaset i någon ORDER BY
klausul som refererar till den kolumnen.
För att åtgärda felet hänvisar du bara till kolumnen med dess alias.
Alternativt kan du ta bort aliaset helt och hållet och referera till kolumnnamnet direkt.
Exempel på fel
Här är ett exempel på kod som ger felet:
(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultat:
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Här använde jag inte aliaset i ORDER BY
klausul som resulterade i felet.
Lösning 1
Ett sätt att lösa det här problemet är att använda aliaset i ORDER BY
klausul:
(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Resultat:
+-------+ | t | +-------+ | Ben | | Cathy | +-------+
I det här fallet blir aliaset kolumnrubriken i resultatet.
Lösning 2
Ett annat sätt att göra det är att ta bort aliaset helt och hållet:
(SELECT TeacherName FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultat:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Den här gången blir kolumnnamnet kolumnrubriken.