Jika Anda mendapatkan kesalahan yang berbunyi seperti “ERROR 1054 (42S22):Kolom tidak dikenal ‘tab.ColName’ di ‘on clause” ” di MariaDB, berikut adalah tiga kemungkinan penyebab:
- Kolom tidak ada.
- Anda mencoba mereferensikan kolom alias dengan nama kolomnya.
- Atau bisa juga sebaliknya. Anda bisa mereferensikan kolom dengan alias yang tidak pernah dideklarasikan.
Jika kolom memiliki alias, maka Anda harus menggunakan alias itu saat mereferensikannya di ON
klausa saat melakukan gabungan terhadap dua tabel atau lebih. Sebaliknya, jika Anda mereferensikan kolom dengan alias, maka Anda perlu memastikan bahwa alias benar-benar dideklarasikan.
Contoh 1
Berikut contoh kode yang menghasilkan kesalahan:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.DogName = d.DogName;
Hasil:
ERROR 1054 (42S22): Unknown column 'c.DogName' in 'on clause'
Di sini saya tidak sengaja menggunakan c.DogName
di ON
klausa ketika saya bermaksud menggunakan c.CatName
.
Dalam hal ini, perbaikannya sederhana. Gunakan nama kolom yang benar:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Contoh 2
Berikut contoh kode lain yang menghasilkan kesalahan:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Hasil:
ERROR 1054 (42S22): Unknown column 'c.CatName' in 'on clause'
Di sini saya mereferensikan alias yang tidak ada di ON
ayat. Saya menggunakan c.CatName
untuk merujuk ke CatName
kolom di Cats
meja. Satu-satunya masalah adalah Cats
tabel tidak memiliki alias.
Untuk memperbaiki masalah ini, yang harus kita lakukan adalah memberikan alias untuk Cats
tabel:
SELECT
CatId,
CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Atau, kita dapat menghapus semua referensi ke alias, dan cukup gunakan nama tabel lengkap:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;
Satu hal yang harus saya tunjukkan adalah, dalam contoh ini kami tidak memberi awalan nama kolom di SELECT
daftar dengan alias. Jika kita melakukannya, kita akan melihat kesalahan yang sama, tetapi dengan pesan yang sedikit berbeda:
SELECT
c.CatId,
c.CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Hasil:
ERROR 1054 (42S22): Unknown column 'c.CatId' in 'field list'
Dalam hal ini, ia mendeteksi kolom yang tidak dikenal dalam daftar bidang sebelum menemukan yang ada di ON
ayat. Bagaimanapun, solusinya sama.
Contoh 3
Berikut contoh kode lain yang menghasilkan kesalahan:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON Cats.CatName = d.DogName;
Hasil:
ERROR 1054 (42S22): Unknown column 'Cats.CatName' in 'on clause'
Dalam hal ini, sebuah alias dideklarasikan untuk Cats
tabel, tapi saya tidak menggunakan alias itu di ON
klausa.
Solusinya di sini, adalah menggunakan alias alih-alih nama tabel:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;