Birden fazla tablodaki alanı tek tabloya hesaplayarak insert
- 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
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...
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...
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
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.sonra da kayıtlardan gerekli toplamların alınması 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))
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. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- kara_kule06
- Üye
- Mesajlar: 150
- Kayıt: 18 Nis 2006 02:15
- Konum: ankara/polatlı
- İletişim:
Hocam cevabınız için tşk. birinci bölüm oldu ama
bu kodda bir syntax hatası veriyor uğraştım fakat bulamadım. Zahmet olmazsa denerseniz sevinirim. Bu arada MYSQL kullanıyorum.
Kolay Gelsin...
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)
Kolay Gelsin...
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
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.
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
www.polisoft.com.tr
- kara_kule06
- Üye
- Mesajlar: 150
- Kayıt: 18 Nis 2006 02:15
- Konum: ankara/polatlı
- İletişim:
Yanılmıyorsam 1. cümlede de SubQuery kullanılıyor.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.
Yani galiba,
Kod: Tümünü seç
insert into Tablo3 (id) (select id from Tablo1 group by id)
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)
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...
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.
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
www.polisoft.com.tr
- kara_kule06
- Üye
- Mesajlar: 150
- Kayıt: 18 Nis 2006 02:15
- Konum: ankara/polatlı
- İletişim:
http://dev.mysql.com/doc/refman/5.1/en/ ... eries.html1.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.
4.1 be sonrasında varmış, 4.1. ücretsiz sürüm, denemenizi öneririm.
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
- kara_kule06
- Üye
- Mesajlar: 150
- Kayıt: 18 Nis 2006 02:15
- Konum: ankara/polatlı
- İletişim:
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Mrb; sorgu yine çalışmazsa o zaman kod yazmak için kolları sıvamak gerekecek.

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

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;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- kara_kule06
- Üye
- Mesajlar: 150
- Kayıt: 18 Nis 2006 02:15
- Konum: ankara/polatlı
- İletişim:
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...
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...
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Demek 5.0.27kara_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...


Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- kara_kule06
- Üye
- Mesajlar: 150
- Kayıt: 18 Nis 2006 02:15
- Konum: ankara/polatlı
- İletişim: