“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. Okumaya devam et

Access ve Random Kayıt

Veritabanı olarak access kullanılan bir projede rasgele seçilmiş 5 tane resmi sayfada göstermemiz gerekiyordu.

Fakat Sql`de çalışan ve bize her seferinde 5 farklı kayıt getiren şu kod access`de çalışmıyor.

SELECT top 5 ID FROM Tablo_Adi ORDER BY newid()

Çünki newid() fonksiyonu access için geçerli değildi. Bende zaman sorunu olduğu için en iyi kod çalışan koddur mantığından yola çıkarak dolaylı bir çözüm bulmuştum.

Önce ID leri bir arrayList`e çekip bunların içerisinden rasgele 5 ID yi çekiyordum ama aynı kaydın gelme ihtimali yüzünden her bulduğum ID`yi farklı bir arrayList`e aktarıp bir önceki arrayList`imden çıkartıyordum. Sonuçta elimde birbirinden farklı rasgele seçilmiş 5 adet ID vardı. İşlemin geri kalanını bu 5 ID üzerinden tamamlıyordum. Fakat performans açısından çokta verimli değildi açıkçası :)

Neyse zaman sorunu olduğu için bu şekilde projeyi tamamladım ama araştırmalarım devam ediyordu. Araştırmalar sonucunda şöyle bir örnek buldum;

SELECT TOP 5 ID FROM Tablo_Adi Order By rnd(ID)

Fakat bu seferde rasgele gelen 5 kayıt sorgumuz her çalıştığında aynı geliyordu. Bunun üzerine ufak bir araştırma yaptıktan sonra sorgumuz aşağıdaki son halini almış oldu. Böylece sorgumuz her çalıştığında rasgele seçilmiş 5 farklı kayıt getirir hale geldi.

SELECT TOP 5 ID FROM Tablo_Adi Order By rnd(-(ID)*Time())

Sorgumuzun bu son hali ile ihtiyacımız olan işlemi kolayca gerçekleştirdim. Benzer bir durumla karşılaşan olursa ve benim tekrar ihtiyacım olursa diye buradan da paylaşmak istedim, umarım faydası olur.