SQL "Unknown column" hatası, sorguda kullanılan bir sütun adının veritabanı tarafından tanınmamasından kaynaklanır. Çözüm için önce sütun adının yazımını kontrol etmeli, tablo şemasını DESCRIBE veya SHOW COLUMNS ile doğrulamalı, ardından JOIN'lerde kullanılan alias'ların ve GROUP BY/ORDER BY ifadelerindeki sütun referanslarının doğru olduğundan emin olmalısınız. Çoğu durumda hata, basit bir yazım hatasından veya sorgunun farklı bir bölümünde tanımlanmamış bir sütuna atıfta bulunulmasından kaynaklanır.
"Unknown column" Hatası Nedir?
"Unknown column" hatası, MySQL'e özgü bir hata mesajıdır ve sorguda referans verilen bir sütunun, ilgili tabloda veya sorgu bağlamında bulunamadığını belirtir. Hata genellikle şu formatta görünür:
ERROR 1054 (42S22): Unknown column 'sutun_adi' in 'field list'
Mesajın sonundaki "field list", "where clause", "order clause" veya "group statement" gibi ifadeler, hatanın sorgunun hangi bölümünde oluştuğunu gösterir. MySQL 5.7 ve 8.0 sürümlerinde temel hata biçimi aynıdır: istemci çıktısında ERROR 1054 (42S22): Unknown column 'column_name' in 'where clause' gibi görünür ve hata mesajı şablonu Unknown column '%s' in '%s' şeklindedir. Bu detay, sorunu bulmak için önemli bir ipucudur çünkü hatanın SELECT, WHERE, GROUP BY veya ORDER BY kısmında mı oluştuğunu doğrudan söyler.
Bu hata çalışma zamanında değil, sorgu ayrıştırma (parsing) aşamasında ortaya çıkar. Yani MySQL, sorguyu çalıştırmadan önce sütun adlarını tabloya ait şema bilgisiyle karşılaştırır ve eşleşme bulamazsa sorguyu tamamen reddeder.
Hatanın Yaygın Nedenleri

Bu hatanın arkasında genellikle birkaç tekrar eden neden vardır:
- Yazım hatası: Sütun adının büyük/küçük harf, boşluk veya harf hatası içermesi (örneğin
user_nameyerineusr_nameyazılması). - Yanlış tablo veya alias referansı: Sorguda birden fazla tablo varken, sütunun hangi tabloya ait olduğunun karışması veya var olmayan bir alias'a atıfta bulunulması.
- JOIN'de eksik alan: JOIN yapılan tabloda o sütunun gerçekten bulunmaması ya da JOIN koşulunda yanlış sütun kullanılması.
- GROUP BY/ORDER BY'da olmayan sütun kullanımı: SELECT ifadesinde tanımlanmamış veya alias verilmemiş bir sütunun GROUP BY ya da ORDER BY içinde çağrılması.
Bu nedenlerin ortak noktası, sorgunun bir yerinde MySQL'in beklediği şema ile yazılan ifadenin uyuşmamasıdır. Karmaşık sorgularda, özellikle çok tablolu JOIN'lerde bu uyuşmazlığı gözle fark etmek zorlaşabilir.
Adım Adım Çözüm
Hatayı çözmek için sistematik bir sıra izlemek, deneme yanılma yapmaktan daha hızlı sonuç verir:
- Hata mesajını oku: Hangi sütun adının sorunlu olduğunu ve sorgunun hangi bölümünde ("field list", "where clause" vb.) hata oluştuğunu belirleyin.
- Sütun adının yazımını kontrol edin: Sorgudaki sütun adını, şemada tanımlı olan adla harf harf karşılaştırın.
- Tablo şemasını doğrulayın:
DESCRIBE tablo_adi;veyaSHOW COLUMNS FROM tablo_adi;komutlarıyla tabloda gerçekten hangi sütunların bulunduğunu görün. - Alias kullanımını gözden geçirin: Sorguda tanımlanan tablo alias'larının, sütun referanslarında doğru şekilde kullanıldığından emin olun.
Bu sıra, hatanın kaynağını genellikle ilk iki adımda ortaya çıkarır. Sorun devam ediyorsa, JOIN yapısına ve GROUP BY/ORDER BY ifadelerine bakmak gerekir.
JOIN ve Alias Kaynaklı Hatalar
Birden fazla tabloyu JOIN ile birleştirdiğinizde "Unknown column" hatasının en sık görüldüğü yer burasıdır. Sebep basit: iki veya daha fazla tabloda aynı isimde sütun varsa, MySQL bu sütuna hangi tablodan bakması gerektiğini anlayamaz.
Örnek:
SELECT id, name
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE id = 5;
Hem orders hem customers tablosunda id sütunu olduğu için MySQL WHERE id = 5 satırında hangi tabloyu kastettiğinizi bilemez ve "Unknown column 'id' in 'where clause'" hatası verir. Çözüm, her sütunu ait olduğu tablonun alias'ıyla belirtmektir:
SELECT o.id, c.name
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE o.id = 5;
Alias çakışmalarında bir başka yaygın hata da alias'ı tanımlamadan kullanmaktır:
SELECT o.id, cust.name
FROM orders o
JOIN customers c ON o.customer_id = c.id;
Burada customers tablosuna c alias'ı verilmiş ama SELECT içinde cust.name yazılmış. MySQL cust diye bir alias bilmediği için hata döner. Alias'ı tanımladığınız isimle tutarlı kullanmak bu tür hataları önler.
Kural olarak, JOIN kullanan her sorguda sütun isimlerini tablo adı veya alias ile öneklemek (o.id, c.name gibi) hem hatayı önler hem de sorguyu okunabilir kılar.
GROUP BY / ORDER BY / HAVING ile İlgili Örnekler

Bu ifadelerde de aynı hata, SELECT listesinde olmayan veya yanlış yazılmış bir sütuna referans verildiğinde ortaya çıkar. Özellikle HAVING cümlesinde ham sütun adı kullanmak sık yapılan bir hatadır:
SELECT customer_id, COUNT(*) AS total_orders
FROM orders
GROUP BY customer_id
HAVING total_orderss > 5;
Burada total_orderss yanlış yazılmış (doğrusu total_orders), bu yüzden MySQL bu alias'ı bulamaz ve "Unknown column" hatası verir.
ORDER BY tarafında da benzer durum yaşanır: SELECT'te olmayan bir sütuna göre sıralama yapmaya çalışmak, sütun adı yanlış yazıldığında hataya dönüşür.
MySQL 5.7.5 ve sonraki 5.7 sürümlerinde ONLY_FULL_GROUP_BY varsayılan SQL modu içinde yer alır; MySQL 8.0 sürümünde de varsayılan SQL modunun bileşenlerinden biridir. Etkin olduğunda, GROUP BY içeren sorgularda GROUP BY ile uyumsuz ve işlevsel olarak bağımlı olmayan toplulaştırılmamış sütunlar için 1055 numaralı hata üretilir; bu nedenle bu durum "Unknown column" hatasıyla karıştırılmamalıdır.
Farklı Veritabanı Motorlarında Karşılığı
"Unknown column" ifadesi MySQL'e özgüdür. Diğer veritabanı motorlarında aynı problem farklı hata mesajlarıyla karşınıza çıkar:
- PostgreSQL:
column "x" does not existşeklinde bir hata döner. - SQL Server ve Oracle'da da benzer sütun bulunamadı hataları mevcuttur. SQL Server'da tipik karşılık, 207 numaralı hata koduyla verilen "Invalid column name" mesajıdır; Oracle'da ise ORA-00904 koduyla verilen "invalid identifier" mesajıdır. Tam hata metni ve hata kodu motora göre değişir.
Farklı veritabanı motoruna geçiş yapıyorsanız, hata mesajının farklı görünmesi sorunun aynı olmadığı anlamına gelmez; kök neden çoğunlukla yine yanlış yazılmış sütun adı veya alias belirsizliğidir.
Sık Sorulan Sorular
Unknown column hatası neden oluşur?
MySQL, sorguyu çalıştırmadan önce sözdizimini ve referans verilen sütunları kontrol eder. Sorguda geçen bir sütun adı, ilgili tabloda veya JOIN edilmiş tablolarda yoksa, yazım hatası içeriyorsa ya da yanlış bir alias üzerinden çağrılıyorsa MySQL bu sütunu çözemez ve "Unknown column" hatasını döner. Kısacası hata, veritabanı motorunun sorguda geçen ismi mevcut tablo yapısıyla eşleştirememesinden kaynaklanır.
Bu hatayı hangi komutla tespit edebilirim?
DESCRIBE tablo_adi; veya SHOW COLUMNS FROM tablo_adi; komutlarıyla tablonun gerçek sütun adlarını görebilirsiniz. Sorgu birden fazla tablo içeriyorsa, her tabloyu tek tek kontrol edip hatalı sütunun hangi tabloya ait olduğunu belirlemek en hızlı yoldur. Ayrıca sorguyu parça parça çalıştırmak (önce SELECT listesini, sonra WHERE koşulunu ayrı ayrı test etmek) sorunun tam olarak nerede olduğunu bulmayı kolaylaştırır.
Alias kullanımı bu hataya nasıl yol açar?
Bir tabloya alias verildiğinde, sorgunun devamında o tabloya artık orijinal adıyla değil alias ile referans vermeniz gerekir. Eski tablo adını kullanmaya devam etmek, alias'ı SELECT listesinde tanımlayıp WHERE veya GROUP BY içinde unutmak ya da birden fazla tabloda aynı isimli sütun varken alias belirtmemek, MySQL'in sütunu bulamamasına neden olur.
Bu hatayı canlı ortamda önceden nasıl önlerim?
Şema değişikliklerini (sütun silme, yeniden adlandırma) migration dosyalarıyla yönetip uygulama kodunu aynı anda güncellemek, sorguları canlıya almadan önce staging ortamında test etmek ve mümkünse ORM veya query builder kullanarak sütun adlarını merkezi bir yerden yönetmek bu hatanın önüne geçer.
Sonuç olarak "Unknown column" hatası çoğu zaman küçük bir yazım farkından veya şema güncellemesinin kod tarafına yansıtılmamasından kaynaklanır; sorguyu adım adım kontrol ederek kısa sürede çözülebilir.