reyou Mesaj tarihi: Ekim 13, 2011 Mesaj tarihi: Ekim 13, 2011 soru su; http://stackoverflow.com/questions/176964/select-top-10-records-for-each-category select top 10 records for each category cevap su; cevap said: select * from Things t where t.ThingID in ( select top 10 ThingID from Things tt where tt.Section = t.Section and tt.ThingDate = @Date order by tt.DateEntered desc ) and t.ThingDate = @Date order by Section, DateEntered desc ya, sql engine in nasi isledigini kafamda otutturamadim, inner select disindaki select ile join olayina giriyo ama hangisi once sorgulaniyo bunlari, icerdeki desem disindaki daha calismamis oluyo disindaki olsa icteki keza calismamis oluyo. biri babanneye anlatir gibi anlatabilir mi?
Mirage Mesaj tarihi: Ekim 14, 2011 Mesaj tarihi: Ekim 14, 2011 http://beginner-sql-tutorial.com/sql-subquery.htm said: "A query is called correlated subquery when both the inner query and the outer query are interdependent. For every row processed by the inner query, the outer query is processed as well. The inner query depends on the outer query before it can be processed."
riglous Mesaj tarihi: Ekim 14, 2011 Mesaj tarihi: Ekim 14, 2011 Dıştaki sorgu çalışır. Sonra her bir satır için içerdeki sorgu çalışır ve o kategori için top 10'u getirir vs. Biz buna safi "mallık" diyoruz, zira böyle query yazılmaz. Oturur adam gibi join yaparsın.
reyou Mesaj tarihi: Ekim 14, 2011 Konuyu açan Mesaj tarihi: Ekim 14, 2011 riglous said: Dıştaki sorgu çalışır. Sonra her bir satır için içerdeki sorgu çalışır ve o kategori için top 10'u getirir vs. Biz buna safi "mallık" diyoruz, zira böyle query yazılmaz. Oturur adam gibi join yaparsın. bu acikliyor herseyi. tesekkurker :) join dedigin sekli su sekildemi; said: SELECT a.* FROM articles AS a LEFT JOIN articles AS a2 ON a.section = a2.section AND a.article_date <= a2.article_date GROUP BY a.article_id HAVING COUNT(*) <= 10; bide join in buna gore avantaji noluyoki ?
4Ever Mesaj tarihi: Ekim 14, 2011 Mesaj tarihi: Ekim 14, 2011 riglous said: Dıştaki sorgu çalışır. Sonra her bir satır için içerdeki sorgu çalışır ve o kategori için top 10'u getirir vs. Biz buna safi "mallık" diyoruz, zira böyle query yazılmaz. Oturur adam gibi join yaparsın. İçerideki tablodan veri getirmeyeceksen. Join'e gerek yok bence. Sorguda güzel yani nesini beğenmedin :)
4Ever Mesaj tarihi: Ekim 14, 2011 Mesaj tarihi: Ekim 14, 2011 reyou said: join dedigin sekli su sekildemi; said: SELECT a.* FROM articles AS a LEFT JOIN articles AS a2 ON a.section = a2.section AND a.article_date <= a2.article_date GROUP BY a.article_id HAVING COUNT(*) <= 10; bide join in buna gore avantaji noluyoki ? JOIN ile IN arasındaki fark söyledir. JOIN Örnek: " SELECT a.id,b.id FROM tablo1.a JOIN tablo2.b (b.id = a.id) " Bu sorguda b.id ile tablo2'den de veri cekebilirsin. IN Örnek " SELECT a.id FROM tablo1.a WHERE a.id IN (SELECT b.id FROM table2.b) " Bu sorguda tablo2'den veri alamazsın.
riglous Mesaj tarihi: Ekim 14, 2011 Mesaj tarihi: Ekim 14, 2011 Yeniden yazman gerekse select * from ( select t.* , rank() over (partition by t.thingsid) rnk from things t , things tt where 1=1 and t.section=tt.section) where 1=1 and rnk <= 10 date'ini falan koyarsın. Oracle'da böyle yazarım ben olsam. MySQL'de işler nasıl yürüyor bilmiyorum. --- Neden 'mallık'... Performans sorunu olur. Tablo1'deki her bir kayıt için Tablo2'ye tekrar tekrar gidip okuma yapman gerekir. Join kullandığında Tablo1 ve Tablo2'yi bir defa okursun. Ayrıca inner select'ten herhangi bir şey okumayacaksan niye içine bu şekilde koyarsın? Aynı satırı 10 defa tekrar etmek için mi? Aynı section'daki "Thing"leri alıp, geri döndürmüyorsun?!?!
4Ever Mesaj tarihi: Ekim 14, 2011 Mesaj tarihi: Ekim 14, 2011 PostgreSQL kullanıyoruz, ve IN performansı JOIN'e göre daha iyi, her satır için tekrar okumuyor, tek seferde okuyor ve olup olmadığını kontrol ediyor. Çok büyük tablolarda kullandığımız oldu. Belki MYSQL'de farklıdır.
Öne çıkan mesajlar