Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Behebung von „ERROR 1250 (42000):Table ‚…‘ from one of the SELECTs can not used in global ORDER Clause“ bei der Verwendung von UNION in MySQL

Wenn Sie einen Fehler erhalten, der lautet:„ERROR 1250 (42000):Tabelle ‚…‘ von einem der SELECTs kann nicht in der globalen ORDER-Klausel verwendet werden, wenn Sie die UNION verwenden -Klausel in einer MySQL-Abfrage, liegt es wahrscheinlich daran, dass Sie einen Spaltennamen mit seinem Tabellennamen qualifizieren.

Dies funktioniert nicht in MySQL.

Um dieses Problem zu beheben, entfernen Sie entweder den Tabellennamen oder verwenden Sie einen Spaltenalias.

Fehlerbeispiel

Hier ist ein Codebeispiel, das den Fehler erzeugt:

(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;

Ergebnis:

ERROR 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in global ORDER clause

Hier habe ich versucht, die Ergebnisse nach TeacherName zu ordnen Spalte, aber ich habe diese Spalte mit dem Tabellennamen qualifiziert (ich habe Teachers.TeacherName verwendet um auf den Spaltennamen zu verweisen).

MySQL erlaubt es nicht, Tabellen auf diese Weise zu referenzieren, wenn die Ergebnisse einer UNION geordnet werden Betrieb.

Lösung 1

Eine Möglichkeit, dies zu beheben, besteht darin, den Tabellennamen aus ORDER BY zu entfernen Klausel:

(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;

Ergebnis:

+-------------+
| TeacherName |
+-------------+
| Ben         |
| Bill        |
| Cathy       |
| Ein         |
| Faye        |
| Jet         |
| Spike       |
| Warren      |
+-------------+

Lösung 2

Wenn die vorherige Option nicht geeignet ist, besteht eine andere Möglichkeit zur Behebung des Problems darin, einen Alias ​​zu verwenden. Mit anderen Worten:Weisen Sie der Spalte einen Alias ​​zu und verweisen Sie dann in ORDER BY auf diesen Alias Klausel:

(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;

Ergebnis:

+--------+
| t      |
+--------+
| Ben    |
| Bill   |
| Cathy  |
| Ein    |
| Faye   |
| Jet    |
| Spike  |
| Warren |
+--------+