Pokud se při použití UNION
zobrazuje chyba „CHYBA 1250 (42000):Tabulka „...“ z jednoho z SELECT nemůže být použita v globální klauzuli ORDER klauzule v dotazu MySQL, je to pravděpodobně proto, že kvalifikujete název sloupce s názvem jeho tabulky.
V MySQL to nefunguje.
Chcete-li tento problém vyřešit, odstraňte název tabulky nebo použijte alias sloupce.
Příklad chyby
Zde je příklad kódu, který způsobuje chybu:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Výsledek:
ERROR 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in global ORDER clause
Zde jsem se pokusil seřadit výsledky podle TeacherName
sloupec, ale kvalifikoval jsem tento sloupec názvem tabulky (použil jsem Teachers.TeacherName
odkaz na název sloupce).
MySQL neumožňuje odkazovat na tabulky tímto způsobem při řazení výsledků UNION
operace.
Řešení 1
Jedním ze způsobů, jak to vyřešit, je odstranit název tabulky z ORDER BY
klauzule:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Výsledek:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+
Řešení 2
Pokud předchozí možnost není vhodná, dalším způsobem, jak problém vyřešit, je použití aliasu. Jinými slovy, přiřaďte sloupci alias a poté na tento alias odkazujte 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 | +--------+