sql >> Databasteknik >  >> RDS >> Mysql

Fixa "ERROR 1054 (42S22):Okänd kolumn "..." i "ordersats" när du använder UNION i MySQL

Om du får felmeddelandet "1054 (42S22):Okänd kolumn '...' i 'ordningssats'" när du använder UNION klausul i MySQL kan det bero på att du försöker referera till en aliasad kolumn med dess kolumnnamn.

När du använder UNION sats i MySQL, om en kolumn har ett alias, måste du använda det aliaset i någon ORDER BY klausul som refererar till den kolumnen.

Så för att åtgärda felet, se till att referera till kolumnen med dess alias. Alternativt kan du ta bort aliaset och referera till kolumnnamnet direkt.

Exempel på fel

Här är ett exempel på kod som ger felet:

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

Resultat:

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

Här försökte jag sortera resultaten efter TeacherName kolumn, men den kolumnen har ett alias. Det faktum att jag inte använde aliaset i ORDER BY klausul räckte för att skapa felet.

Lösning 1

Ett sätt att lösa det här problemet är att använda 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

Ett annat sätt att göra det är att ta bort aliaset helt och hållet:

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

Resultat:

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

  1. Få veckonummer från ett datum i PostgreSQL

  2. SQL Server-replikering kräver det faktiska servernamnet för att göra en anslutning till servern

  3. Hur man avkodar PostgreSQL-felloggarna

  4. postgres:uppgradera en användare till en superanvändare?