“InnerJoin” Kullanılmış SQL Sorgusunda “Select Top” Kullanımı

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İ
kategori

URUN
urun

Tablolarımızın içerikleride şu şekilde olsun…

tbl_kategori
tbl_urun

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,
islem01

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…
tbl_urun02

Ardından sorgumuzu çalıştıralım ve

islem02

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;

islem03

“InnerJoin” Kullanılmış SQL Sorgusunda “Select Top” Kullanımı” hakkında 6 yorum

  1. 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..

  2. 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.

  3. Çö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.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir