Om du får ett felmeddelande som lyder "ERROR 1250 (42000):Tabell '...' från en av SELECTs kan inte användas i global ORDER-sats" när du använder UNION
klausul i en MySQL-fråga beror det förmodligen på att du kvalificerar ett kolumnnamn med dess tabellnamn.
Detta fungerar inte i MySQL.
För att åtgärda problemet, ta antingen bort tabellnamnet eller använd ett kolumnalias.
Exempel på fel
Här är ett exempel på kod som ger felet:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Resultat:
ERROR 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in global ORDER clause
Här försökte jag sortera resultaten efter TeacherName
kolumnen, men jag kvalificerade den kolumnen med tabellnamnet (jag använde Teachers.TeacherName
för att referera till kolumnnamnet).
MySQL tillåter inte att tabeller refereras på detta sätt när resultaten av en UNION
beställs operation.
Lösning 1
Ett sätt att fixa detta är att ta bort tabellnamnet från ORDER BY
klausul:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultat:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+
Lösning 2
Om det tidigare alternativet inte är lämpligt är ett annat sätt att lösa problemet att använda ett alias. Med andra ord, tilldela ett alias till kolumnen och referera sedan till det aliaset i ORDER BY
klausul:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Resultat:
+--------+ | t | +--------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +--------+