Pokud se vám při použití UNION
zobrazuje chyba „1054 (42S22):Neznámý sloupec „…“ v „klauzuli objednávky“ klauzule v MySQL, může to být proto, že se pokoušíte odkazovat na aliasovaný sloupec jeho názvem.
Při použití UNION
klauzule v MySQL, pokud má sloupec alias, musíte tento alias použít v každém ORDER BY
klauzule, která na tento sloupec odkazuje.
Chcete-li tedy chybu opravit, nezapomeňte na sloupec odkazovat jeho aliasem. Případně můžete odstranit alias 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)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Výsledek:
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Zde jsem se pokusil seřadit výsledky podle TeacherName
sloupec, ale tento sloupec má alias. Skutečnost, že jsem nepoužil alias v ORDER BY
klauzule stačila k vytvoření chyby.
Ř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)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Výsledek:
+--------+ | t | +--------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +--------+
Tím byl problém vyřešen.
Řešení 2
Dalším způsobem, jak to udělat, je odstranit alias úplně:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Výsledek:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+