Jeśli otrzymujesz komunikat „BŁĄD 1250 (42000):Tabela '…' z jednej z opcji SELECT nie może być użyta w klauzuli ORDER”, jest to prawdopodobnie spowodowane kwalifikacją nazwy kolumny z jej nazwą tabeli, gdy używasz operatora, takiego jak UNION
, INTERSECT
lub EXCEPT
w MariaDB.
Aby to naprawić, usuń nazwę tabeli lub użyj aliasu kolumny.
Przykład błędu
Oto przykład kodu, który generuje błąd:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Wynik:
ERROR 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in ORDER clause
W tym przypadku próbowałem uporządkować wyniki według TeacherName
kolumna, ale zakwalifikowałem tę kolumnę nazwą tabeli (użyłem Teachers.TeacherName
odwoływać się do nazwy kolumny).
Tabele referencyjne takie jak ta nie działają podczas porządkowania wyników UNION
działanie w MariaDB. To samo dotyczy porządkowania wyników INTERSECT
operator i EXCEPT
operatora.
Rozwiązanie 1
Jednym ze sposobów rozwiązania tego problemu jest usunięcie nazwy tabeli z ORDER BY
klauzula:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Rozwiązanie 2
Innym sposobem, aby to naprawić, jest użycie aliasu dla kolumny:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Dzięki tej opcji przypisujemy alias do kolumny, a następnie odwołujemy się do tego aliasu w ORDER BY
klauzula.