Karışık bir SQL cümlesi

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
schumi
Üye
Mesajlar: 41
Kayıt: 18 Şub 2005 04:04

Karışık bir SQL cümlesi

Mesaj gönderen schumi »

Kod: Tümünü seç

'select ADI,KONUM from dernekler where ID IN ( select DERNEK_ID  from islem where BAGIS_ID = :bagisid )'
1.Tablo ( dernekler )
ID,ADI,KONUM

2.Tablo (bagislar)
ID,ADI

3.Tablo (islem)
ID,BAGIS_ID,DERNEK_ID,TUTAR


Yukarıdaki sorgu sorunsuz çalışıyor. Bu sorgu sonucunda dernekler talosundaki ADI ve KONUM alanlarını alabiliyorum. Yani belirtilen bağış için hangi derneklerin bağış topladığını liste halinde görebiliyorum.Fakat bu sorgu sonucunda bir alana daha ulaşmam gerekiyor. O da "islem" tablosundaki TUTAR alanı. Bunu nasıl yapabilirim ? Bu SQL cümlesine ne eklemem gerekli ?
Ferrari bir tutkudur.

ScHuMi o tutkuyu yaşatır.
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Mesaj gönderen deltas »

Kod: Tümünü seç

'select a.ADI,a.KONUM,b.TUTAR from dernekler a, islem b where ID IN ( select DERNEK_ID  from islem where BAGIS_ID = :bagisid )'
yukarıdaki kodu bi deneyin.
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
schumi
Üye
Mesajlar: 41
Kayıt: 18 Şub 2005 04:04

Mesaj gönderen schumi »

Düzeltme : Hata vermedi ama çıkan sonuç doğru değil. Şöyle ki;
bu sorgu sonucunda veritabanındaki tüm bağışlar tüm dernekler tarafından yapılmış görünüyor . Yani 500,00YTL lik bağışı a derneği yapmış ise bu bağışı tüm dernekler yapmış gibi listeleniyor. Hiç bir süzme işlemine tabii olmuyor.
Ferrari bir tutkudur.

ScHuMi o tutkuyu yaşatır.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Mrb;

Kod: Tümünü seç

'select a.ADI,a.KONUM,b.TUTAR from dernekler a, islem b where 

a.ID=b.DERNEK_ID and

ID IN ( select DERNEK_ID  from islem where BAGIS_ID = :bagisid )'
şertı da eklenirse çalışacaktır herhalde. Kolay gele.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
schumi
Üye
Mesajlar: 41
Kayıt: 18 Şub 2005 04:04

Mesaj gönderen schumi »

Yine olmadı maalesef sonuç yanlış.

O dernek eğer o tarihte bağış toplamış ise o derneğe ait tüm bağışları listeliyor. Yani sadece seçilen tarihtekini listelemiyor.

Biraz uğraştırdım biliyorum ama bu SQL cümlesi gerçekten biraz karışık oldu galiba :)
Ferrari bir tutkudur.

ScHuMi o tutkuyu yaşatır.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Bahsettiğin şart sorguda geçmiyor. İstediğin sorgunun şartında neyin eksik olduğunu çok isabetli şekilde tesbit edebiliyorsan bunu sorguya eklemek, senin için çocuk oyuncağı olması lazım.

->Sakın elini korkak alıştırma, kollarının sıyır işe ortasından dal. Yaptıklarının çalışamayacağını düşünebilirsin hatta çalışmaya bilir de. Kimse vahiyle gelmiş mükemmel ve sıfır hatalı kodları kullanmıyor zaten. Nerede hata veya eksiğin varsa bunu kendin tamamlamalısın. Bu senin çok daha hızlı gelişmeni sağlayacaktır. Hoş bazı yerlere takılıp ta bunu da kendim yapacağım diye inat edersen de bu sefer kayıpların olur (zaman vs.). Bu noktada forumlara yönelirsen mutlu mesut geçinir gidersin. <- Bu yazıyı bir yerde görmüştüm o zamandan beri saklarım. Gerçi biraz değişiklik yaptım ama neyse. Kolay gelsin.:D
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Eğer ihtiyacı ve yapıyı doğru anladıysam kullandığımız alt sorgu gereksiz. Bunun yerine join kullandığınızda problem kendiliğinde çözülüyor zaten....

Kolay gelsin....

Kod: Tümünü seç

Select D.ADI, D.KONUM, I.TUTAR
from ISLEM as I, DERNEKLER as D
where I.DERNEK_ID=D.ID
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
schumi
Üye
Mesajlar: 41
Kayıt: 18 Şub 2005 04:04

Mesaj gönderen schumi »

Maalesef bu kod tamamen mantığa aykırı. İlk mesajda verdiğim kod sorguyu sorunsuz yapıyor. Fakat sorgu sonucunda oluşan alanlar arasına TUTAR alanını da eklemek istiyorum fakat başka bir tabloda olduğu için beceremiyorum. Herşeyi denedim ama olmuyor bir türlü.

Mantık Şu:

1.Tablo ( dernekler )
ID,ADI,KONUM

2.Tablo (bagislar)
ID,ADI

3.Tablo (islem)
ID,BAGIS_ID,DERNEK_ID,TUTAR

Kullanıcı combobox'dan bir bir bağış seçiyor. Ve bu bağış bagisid değişkenin atanıyor.

Kod: Tümünü seç

'select ADI,KONUM from dernekler where ID IN ( select DERNEK_ID  from islem where BAGIS_ID = :bagisid )'
Sorgumuz ise şunu yapıyor. 3.tabloya bağlanıp BAGIS_ID=bagisid karşılaştırmasını yapıyor ve ordan o bağışı yapan derneklerin ID numaralarını DERNEK_ID ile alıyor. Daha sonra da 1.tabloya gidip DERNEK_ID=ID karşılaştırmasını IN ile yapıyor ve bu derneğe ait ADI,KONUM alanlarını listeliyor. Ben bunun yanına bir de 3.tablodaki TUTAR alanını eklemek istiyorum ama bir türlü beceremedim.
Nerede hata veya eksiğin varsa bunu kendin tamamlamalısın. Bu senin çok daha hızlı gelişmeni sağlayacaktır. Hoş bazı yerlere takılıp ta bunu da kendim yapacağım diye inat edersen de bu sefer kayıpların olur (zaman vs.). Bu noktada forumlara yönelirsen mutlu mesut geçinir gidersin
Bende bunu yapmaya çalışıyorum , buraya kadar geldim ama ne yaptıysam ileri gidemedim :)
Ferrari bir tutkudur.

ScHuMi o tutkuyu yaşatır.
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Mesaj gönderen deltas »

sabanakman hocamın yaptığı sorgu doğru. ben ilk kısmı atlamışım.
Yani sadece seçilen tarihtekini listelemiyor.
eğer tarih gibi bir değişken şartında varsa onuda sorgunun içine koymalısın. Tarih fieldin nerelerde geçiyor onuda yazarsan where'den sonra sorunun düzelecektir. yinede istersen bana tablonu gönder bi deniyeyim. herhalde sana bir çözüm bulabliriz. :)
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
schumi
Üye
Mesajlar: 41
Kayıt: 18 Şub 2005 04:04

Mesaj gönderen schumi »

Resim

Hocam yukarıda resimdeki tablo benim verilerim.

Örneğin bagisid parametresi combox sonucunda =2 olsun.

tablo3 deki BAGIS_ID=2 olan dernekleri listelemek istiyorum.
Benim kodum sonucunda;

karadeniz derneği----merkez
marmara derneği----belde

şeklinde doğru bir sonuç çıkıyor. Ben bir de bu alanlara TUTAR'ı eklemek istiyorum.

karadeniz derneği----merkez----120,00
marmara derneği----belde-------100,50

gibi bir sonuç istiyorum.


sabanakman hocamın sorgusu sonucunda ise şöyle bir sonuç çıkıyor.

karadeniz derneği----merkez----120,00
karadeniz derneği----merkez----124,60
karadeniz derneği----merkez----230,25
marmara derneği----belde-------100,50
marmara derneği----belde-------320,00

Sanırım sorunu tam olarak anlatabilmişimdir :)

yinede istersen bana tablonu gönder bi deniyeyim
Sana nasıl ulaşayım hocam :)
Ferrari bir tutkudur.

ScHuMi o tutkuyu yaşatır.
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Mesaj gönderen deltas »

Kod: Tümünü seç

select a.DERNEK_ID,a.tutar, b.adi, b.konum  from islem a, dernekler b  where b.ID=a.DERNEK_ID and a.ID IN ( select DERNEK_ID  from islem where BAGIS_ID = 2 )
istediğin bu herhalde.
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
schumi
Üye
Mesajlar: 41
Kayıt: 18 Şub 2005 04:04

Mesaj gönderen schumi »

Maalesef hocam ,
1- Sorgu sonucunda DERNEK_ID alanına ihtiyacımız yok o fazlalık yani
2- Sanırım sabanakman hocanın verdiği koddan bir fazlası a.ID IN şeklindeki kısım, ki ben bunu denemiştim sonuç vermemişti. a koysak da koymasak da aynı sonuç çıkıyor.
Ferrari bir tutkudur.

ScHuMi o tutkuyu yaşatır.
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Mesaj gönderen deltas »

Kod: Tümünü seç

select a.tutar, b.adi, b.konum  from islem a, dernekler b  where b.ID=a.dernek_id and  a.ID IN ( select ID from islem where BAGIS_ID = 2 )
üstte denerken yazmış olduğum kodu kopyalamışım. doğrusu bu.
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
schumi
Üye
Mesajlar: 41
Kayıt: 18 Şub 2005 04:04

Mesaj gönderen schumi »

Heh bu oldu işte hocam :) Eninde sonunda mutlu sona ulaştık ,
sanırım olayı şu "select ID from" satırında bitirdik. Çok teşekkür ediyorum.
Ferrari bir tutkudur.

ScHuMi o tutkuyu yaşatır.
Cevapla