Birden fazla tablodaki alanı tek tabloya hesaplayarak insert

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Birden fazla tablodaki alanı tek tabloya hesaplayarak insert

Mesaj gönderen kara_kule06 »

Slm arkadaşlar.

Forumda aramama rağmen tam olarak istediğimi bulamadım.

Benim üç adet tablom var. ve yapısı şöyle;

Tablo1
id,alan1,alan2

Tablo2
id,alan1,alan2

Tablo3
id,hesapalani

Tablo1 ve Tablo2 de 300 adet kayıt var. Tablo3 ise boş.

Şimdi burda benim yapmak istediğim Tablo1 deki tüm alan1 ile tablo2 deki alan1 i toplayıp Boş olan Tablo3 ün hesapalani adlı alanına kaydetsin.
Tablo1 ve Tablo2 deki kayıtları sırasıyla alsın hesaplayıp Tablo3 deki hesapalani tablosuna kaydetsin. Bunu Delphide Kod yazmadan MySQL de SQL sorgusu ile nasıl yazabilirim.


Kolay Gelsin...
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
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; vereceğim örnek kodu MySQL desteklermi bilmem ama büyük olasılıkla çalışması lazım. Önce Tablo3'ün farklı id lerle doldurulması gerek.

Kod: Tümünü seç

insert  into Tablo3 (id) (select id from Tablo1 group by id)
insert  into Tablo3 (id) (select id from Tablo2 group by id where not Tablo2.id in (select Tablo1.id from Tablo1 group by id))
sonra da kayıtlardan gerekli toplamların alınması gerek.

Kod: Tümünü seç

update Tablo3 set HesapAlani=(select sum(Tablo1.alan1) from Tablo1 where Tablo1.id=Tablo3.id)+(select sum(Tablo2.alan1) from Tablo2 where Tablo2.id=Tablo3.id)
.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Mesaj gönderen kara_kule06 »

Hocam cevabınız için tşk. birinci bölüm oldu ama

Kod: Tümünü seç

update Tablo3 set HesapAlani=(select sum(Tablo1.alan1) from Tablo1 where Tablo1.id=Tablo3.id)+(select sum(Tablo2.alan1) from Tablo2 where Tablo2.id=Tablo3.id)
bu kodda bir syntax hatası veriyor uğraştım fakat bulamadım. Zahmet olmazsa denerseniz sevinirim. Bu arada MYSQL kullanıyorum.

Kolay Gelsin...
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba,
2. cümlede SubQuery kullanılıyor MySQL kullandığınız versiyonun SubQuery desteği olmayabilir, bildiğim kadarıyla SubQuery MySQL in ücretli olan yeni sürümünde mevcut.
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Mesaj gönderen kara_kule06 »

vkamadan yazdı:Merhaba,
2. cümlede SubQuery kullanılıyor MySQL kullandığınız versiyonun SubQuery desteği olmayabilir, bildiğim kadarıyla SubQuery MySQL in ücretli olan yeni sürümünde mevcut.
Kolay gelsin.
Yanılmıyorsam 1. cümlede de SubQuery kullanılıyor.

Yani galiba,

Kod: Tümünü seç

insert  into Tablo3 (id) (select id from Tablo1 group by id) 
ile

Kod: Tümünü seç

update Tablo3 set HesapAlani=(select sum(Tablo1.alan1) from Tablo1 where Tablo1.id=Tablo3.id)+(select sum(Tablo2.alan1) from Tablo2 where Tablo2.id=Tablo3.id)
arasında Sub query açısından bir fark yok.

Atrıca Mysql in paralı versiyonunda bu destek varsa ben bittim.
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba ,
Hayır birinci cümlede subQuery yok tek bir query var, yani tek bir select var, ama UPDATE cümlesinde iki adet var, kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Mesaj gönderen kara_kule06 »

yani mySql in paralı versiyonu elde etmekten başka çare yok gibi ilginiz için teşekkürler



Kolay Gelsin...
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

1.9.5.1. Subquery Support

MySQL 4.1 and up supports subqueries and derived tables. A “subquery” is a SELECT statement nested within another statement. A “derived table” (an unnamed view) is a subquery in the FROM clause of another statement. See Section 13.2.8, “Subquery Syntax”.

For MySQL versions older than 4.1, most subqueries can be rewritten using joins or other methods. See Section 13.2.8.11, “Rewriting Subqueries as Joins for Earlier MySQL Versions”, for examples that show how to do this.
http://dev.mysql.com/doc/refman/5.1/en/ ... eries.html

4.1 be sonrasında varmış, 4.1. ücretsiz sürüm, denemenizi öneririm.
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Mesaj gönderen kara_kule06 »

şimdi indirip deniyorum tşk.
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
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; sorgu yine çalışmazsa o zaman kod yazmak için kolları sıvamak gerekecek.
Resim

1. sorguların çalıştığını varsayak çalışmayan update sorgusu için devam ediyorum.

Kod: Tümünü seç

Tablo1.SQL.Text:='select sum(alan1) from Tablo1 group by id';
Tablo1.Open;
Tablo2.SQL.Text:='select sum(alan1) from Tablo2 group by id';
Tablo2.Open;
Tablo3.First;
while not Tablo3.Eof do begin
  Tablo3.Edit;
  Tablo3HesapAlani.Clear;
  if Tablo1.Locate('id') then 
    Tablo3HesapAlani.AsFloat:=Tablo1Alan.AsFloat;
  if Tablo2.Locate('id') then
   Tablo3HesapAlani.AsFloat:= 
    Tablo3HesapAlani.AsFloat+Tablo2Alan.AsFloat;
  Tablo3.Post;
  Tablo3.Next;
end;
kolay gele.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Mesaj gönderen kara_kule06 »

Sorunu hallettim.

vkamadan dediği gibi sorun versiyon daymış. 4.1.22 yi indirdim. sorgu çalıştı ama bu kezde program gözle görülür bir şekilde yavaşlamaya başladı. bende 5.0.27 yi indirdim gerçektende 5.0.27 çok hız. Galiba 4.1.22 geçiş versiyonu olduğu için yavaş çalışıyor. Nyse herkese taşekkür ediyorum.

Kolay Gelsin...
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
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 »

kara_kule06 yazdı:Sorunu hallettim.

vkamadan dediği gibi sorun versiyon daymış. 4.1.22 yi indirdim. sorgu çalıştı ama bu kezde program gözle görülür bir şekilde yavaşlamaya başladı. bende 5.0.27 yi indirdim gerçektende 5.0.27 çok hız. Galiba 4.1.22 geçiş versiyonu olduğu için yavaş çalışıyor. Nyse herkese taşekkür ediyorum.

Kolay Gelsin...
Demek 5.0.27 :!: Bir yaşıma daha girdim :D .
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Mesaj gönderen kara_kule06 »

Evet hocam MySql in sitesine girirseniz ordan indirebilirsiniz.
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
Cevapla