sql >> Databáze >  >> RDS >> Mysql

Oprava „ERROR 1054 (42S22):Neznámý sloupec „…“ v „klauzuli objednávky“ při použití UNION v MySQL

Pokud se vám při použití UNION zobrazuje chyba „1054 (42S22):Neznámý sloupec „…“ v „klauzuli objednávky“ klauzule v MySQL, může to být proto, že se pokoušíte odkazovat na aliasovaný sloupec jeho názvem.

Při použití UNION klauzule v MySQL, pokud má sloupec alias, musíte tento alias použít v každém ORDER BY klauzule, která na tento sloupec odkazuje.

Chcete-li tedy chybu opravit, nezapomeňte na sloupec odkazovat jeho aliasem. Případně můžete odstranit alias a odkazovat přímo na název sloupce.

Příklad chyby

Zde je příklad kódu, který způsobuje chybu:

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

Výsledek:

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

Zde jsem se pokusil seřadit výsledky podle TeacherName sloupec, ale tento sloupec má alias. Skutečnost, že jsem nepoužil alias v ORDER BY klauzule stačila k vytvoření chyby.

Řešení 1

Jedním ze způsobů, jak tento problém vyřešit, je použít alias v ORDER BY klauzule:

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

Výsledek:

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

Tím byl problém vyřešen.

Řešení 2

Dalším způsobem, jak to udělat, je odstranit alias úplně:

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

Výsledek:

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

  1. Nerovná se <> !=operátor na NULL

  2. Datový typ ENUM (Enumeration) v MySQL:12 nejdůležitějších faktů a užitečných tipů

  3. SQLite SUBSTRING() Vysvětleno

  4. Kniha „PostgreSQL 9.0 High Performance“ je venku