Jika Anda mendapatkan kesalahan "1054 (42S22):Kolom tidak diketahui '...' di 'order clause'" saat menggunakan UNION
klausa di MySQL, bisa jadi karena Anda mencoba mereferensikan kolom alias dengan nama kolomnya.
Saat menggunakan UNION
klausa di MySQL, jika kolom memiliki alias, maka Anda harus menggunakan alias itu di ORDER BY
apa pun klausa yang mereferensikan kolom itu.
Jadi untuk memperbaiki kesalahan, pastikan untuk mereferensikan kolom dengan aliasnya. Atau, Anda dapat menghapus alias dan merujuk nama kolom secara langsung.
Contoh Kesalahan
Berikut contoh kode yang menghasilkan kesalahan:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Hasil:
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Disini saya mencoba mengurutkan hasilnya dengan TeacherName
kolom, tetapi kolom itu memiliki alias. Fakta bahwa saya tidak menggunakan alias di ORDER BY
klausa sudah cukup untuk menghasilkan kesalahan.
Solusi 1
Salah satu cara untuk memperbaiki masalah ini adalah dengan menggunakan alias di ORDER BY
klausa:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Hasil:
+--------+ | t | +--------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +--------+
Itu memecahkan masalah.
Solusi 2
Cara lain untuk melakukannya adalah dengan menghapus alias sama sekali:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Hasil:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+