Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

biri bana su sql sorgusunu aciklayabilirmi


Öne çıkan mesajlar

Mesaj tarihi:
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?
Mesaj tarihi:
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."
Mesaj tarihi:
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.
Mesaj tarihi:
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
?
Mesaj tarihi:
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 :)
Mesaj tarihi:
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.
Mesaj tarihi:
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?!?!
Mesaj tarihi:
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.
×
×
  • Yeni Oluştur...