sql >> Database >  >> RDS >> Mysql

Fix "ERROR 1250 (42000):Tabel '...' van een van de SELECT's kan niet worden gebruikt in de globale ORDER-clausule" bij gebruik van UNION in MySQL

Als u een foutmelding krijgt met de tekst "ERROR 1250 (42000):Tabel '...' van een van de SELECT's kan niet worden gebruikt in de globale ORDER-clausule" bij gebruik van de UNION clausule in een MySQL-query, komt dit waarschijnlijk omdat u een kolomnaam kwalificeert met zijn tabelnaam.

Dit werkt niet in MySQL.

Om dit probleem op te lossen, verwijdert u de tabelnaam of gebruikt u een kolomalias.

Voorbeeld van fout

Hier is een voorbeeld van code die de fout veroorzaakt:

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

Resultaat:

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

Hier heb ik geprobeerd de resultaten te ordenen op TeacherName kolom, maar ik heb die kolom gekwalificeerd met de tabelnaam (ik gebruikte Teachers.TeacherName om naar de kolomnaam te verwijzen).

MySQL staat niet toe dat op deze manier naar tabellen wordt verwezen bij het bestellen van de resultaten van een UNION bediening.

Oplossing 1

Een manier om dit op te lossen is door de tabelnaam te verwijderen uit de ORDER BY clausule:

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

Resultaat:

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

Oplossing 2

Als de vorige optie niet geschikt is, is een andere manier om het probleem op te lossen het gebruik van een alias. Met andere woorden, wijs een alias toe aan de kolom en verwijs vervolgens naar die alias in de ORDER BY clausule:

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

Resultaat:

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

  1. Bereken het verschil tussen twee datetimes in MySQL

  2. Retourneer rijen van INSERT met ON CONFLICT zonder te updaten

  3. Verkrijg de positie van een teken in een tekenreeks in SQLite met Instr()

  4. Hoe de huidige datum in PL/SQL te krijgen?