sql >> Database teknologi >  >> RDS >> Mysql

Ret "FEJL 1054 (42S22):Ukendt kolonne "..." i "ordre clause", når du bruger UNION i MySQL

Hvis du får fejlen "1054 (42S22):Ukendt kolonne '...' i 'ordre clause'", når du bruger UNION klausul i MySQL, kan det skyldes, at du forsøger at henvise til en aliaseret kolonne ved dens kolonnenavn.

Når du bruger UNION klausul i MySQL, hvis en kolonne har et alias, skal du bruge det alias i enhver ORDER BY klausul, der refererer til den kolonne.

Så for at rette fejlen skal du sørge for at henvise til kolonnen ved dens alias. Alternativt kan du fjerne aliasset og henvise direkte til kolonnenavnet.

Eksempel på fejl

Her er et eksempel på kode, der producerer fejlen:

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

Resultat:

ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'

Her forsøgte jeg at sortere resultaterne efter TeacherName kolonne, men den kolonne har et alias. Det faktum, at jeg ikke brugte aliaset i ORDER BY klausulen var nok til at frembringe fejlen.

Løsning 1

En måde at løse dette problem på er at bruge 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 |
+--------+

Det løste problemet.

Løsning 2

En anden måde at gøre det på er at fjerne aliaset helt:

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

Resultat:

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

  1. PreparedStatement og setTimestamp i oracle jdbc

  2. SQL Server DATEPART() vs DATENAME() – Hvad er forskellen?

  3. Post og få på samme tid i php

  4. Medbring din egen sky tilgængelig for DigitalOcean