Bugüne kadar birden fazla tabloyu innerjoin ve benzeri ile birbirine bağlayarak bir sorgu oluşturmuşsanız ve bu sorguda sadece 5 adet kayıt gelsin gibi bir beklentiniz olmuş ise hüsrana uğramış olmanız muhtemeldir.
Böyle bir durumla karşılaşmışsanız ya da karşılaşma ihtimaliniz varsa eğer çözümü burada. Sizi daha fazla oyalamadan hemen örneğimize geçelim.
Kategori ve Urun adında 2 adet tablomuz olsun. Tablolarımızın özellikleri de şöyle olsun;
KATEGORİ
URUN
Tablolarımızın içerikleride şu şekilde olsun…
Bu tablolardan aşağıdaki gibi bir sorgu ile fiyatı en düşük 5 adet kaydı, ürün adları, fiyatları ve kategori adları ile almayı deneyelim.
SELECT Top 5 Urun.UrunAdi, Urun.UrunFiyat, Kategori.kategoriAdi
FROM Kategori
INNER JOIN Urun ON Kategori.kategoriID = Urun.kategoriID Order By UrunFiyat;
Bu şartlar altında elde edeceğimiz sonuç şöyle olacaktır,
Peki neden tüm kayıtlar geldi?
Çünki tüm kayıtlardaki “ORDER BY” ile belirttiğimiz koşul yani UrunFiyat alanlarının hepsi birbirine eşitti.
Sorgumuzu bir daha çalıştıralım ama ondan önce fiyat alanlarından bazılarına değşik değerler girelim…
Ardından sorgumuzu çalıştıralım ve
Bu sefer de 6 kayıt gelmiş. Peki bu sefer sorun nedir?
İlk 4 kaydın fiyat değeri 10,00TL 5. kaydın fiyat değeri 20,00TL ama 6. kaydın fiyat değeride 20,00 TL. Yine bir önceki durum ile aynı sebebten yani order by ile belirtilen koşulun aynı değerlere sahip olması sonucu burada tüm kaytlar gelmedi fakat istediğimizden fazla kayıt geldi. Fiyat değeri 20,00TL olan bir kayıt daha olsaydı 7 kayıt gelecekti sorgu çalıştırılınca.
Peki bunun bir çözümü yok mu?
Tabiki var! “ORDER BY” ile belirtilen koşulua yeni bir değişken daha ekliyoruz, yalnız bu değişkenin OtomatikSayı olarak tanımlanmış bir ID kolonu gibi tablo içerisinde benzersiz bir alan olması gerekiyor.
Şimdi sorgumuzun son haline bir göz atalım;
SELECT Top 5 Urun.UrunAdi, Urun.UrunFiyat, Kategori.kategoriAdi
FROM Kategori
INNER JOIN Urun ON Kategori.kategoriID = Urun.kategoriID Order By UrunFiyat, UrunID;
Şimdide sorgumuzu son kez çalıştıralım ve sonucu hep birlikte görelim;
Ben Böyle Amatör Çözüm görmedim. Çözümde değilki bu!!!
Profesyonel bir çözümün veya çözümün varsa paylaşmanı isterim.
5 adet kayıt gelsin, kendin diyorsun. 5 adet ! LIMIT 0,5 ekle al sana 5 adet daha ne amuda kalkıp yemek yemeye çalışıyorsun ki..
Access ve MsSql`de LIMIT kullanılamıyor.
bunun bir sürü çözümü var, çözüm ürettim sanmayın
mesela
for i = 0 to 4
rs(“”)
next
yada
my sql de limit mssql de top vardır. bilmiyorsanız yanlış yönlendirmeyin.
select top 5 from tablo dersiniz olay biter.
Çözüm değil mi bu? “Ürettiğini sanmak” ne demek?
Yaşanılan bir soruna bulunan çözümü yazıp bunu paylaşınca “çözüm ürettiğimi” mi sanmış oluyorum?
Access`de tek sorgu içerisinde “for i” gibi birşey kullanamazsınız.
Yanlış yönlendirme ile ne alakası var yukarıda yazdıklarımın.
Select top 5 from tablo demekle olay bitmediği için yazıldı bu yazı. Bence yazdığımı en baştan tekrar bir okuyun, sorunun ne olduğunu gözden kaçırmışsınız anladığım kadarıyla.