Pokud se vám zobrazuje chyba „ERROR 1054 (42S22):Neznámý sloupec ‘colname’ v ‘klauzuli objednávky’ ” v MariaDB se může stát, že se pokoušíte odkazovat na aliasový sloupec jeho názvem.
Toto je běžná chyba při spouštění dotazů, které spojují dvě nebo více tabulek. Může k tomu také dojít při použití operátorů, jako je UNION
, INTERSECT
a EXCEPT
.
Obecně platí, že pokud má sloupec alias, musíte tento alias použít v každém ORDER BY
klauzule, která na tento sloupec odkazuje.
Chcete-li chybu opravit, jednoduše odkazujte na sloupec jeho aliasem.
Alternativně můžete alias odstranit úplně a odkazovat přímo na název sloupce.
Příklad chyby
Zde je příklad kódu, který způsobuje chybu:
(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Výsledek:
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Zde jsem nepoužil alias v ORDER BY
klauzule, která vedla k chybě.
Řešení 1
Jedním ze způsobů, jak tento problém vyřešit, je použít alias v ORDER BY
klauzule:
(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Výsledek:
+-------+ | t | +-------+ | Ben | | Cathy | +-------+
V tomto případě se alias stane záhlavím sloupce ve výsledku.
Řešení 2
Dalším způsobem, jak to udělat, je odstranit alias úplně:
(SELECT TeacherName FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Výsledek:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Tentokrát se název sloupce stane záhlavím sloupce.