Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Firebird'de Join'li Update nasıl yapılır?
#1
Merhaba,

Firebird konusunda yeniyim, o nedenle absürt sorularımla karşılaşırsanız hoş görün.

A ve B adlı iki tablom var. A tablosundaki bir alanı B tablosundaki başka bir alandan hesaplayıp UPDATE edeceğim. Mesela şunun gibi "sözde" bir kod olsun;

UPDATE  A 
SET     A.FALAN = SUM(B.Filan)
FROM    TABLO1   A
JOIN    TABLO2   B on A.ID = B.FilanID
WHERE   A.BilmemNe = 33

Bunun Firebird'cesi nedir veya bu kodun yaptığını Firebird 2.5 alemindeki karşılığı nedir?
P.Safa:Yaşlanarak değil, yaşayarak tecrübe kazanılır.Zaman insanları değil,armutları olgunlaştırır
C.Yücel:Toprak gibi olmalısın! Ezildikçe sertleşmelisin!Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı
S.Canan:Bildiğini zannettiğin an hiç bir şey öğrenemezsin
Bilgi uçar
WWW
Cevapla
#2
https://stackoverflow.com/questions/2480...es#tab-top

Yukarıdaki linkte mümkün olmadığı yazılmış. Sub Query mantığında yapılmış. Dolayısıyla sizin kodunuz aşağıdaki şekilde yapılırsa çözülmüş olur.
UPDATE TABLO1 A SET A.FALAN = (SELECT SUM(B.Filan) TABLO2 B WHERE B.FilanID = A.ID) WHERE   A.BilmemNe = 33

Ayırca aşağıdaki kendi dokümanında da ben join yapılmış bir işlem bulamadım.
http://www.firebirdsql.org/file/document...pdate.html
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#3
MERGE ile aşağıdaki şekilde yapabilirsiniz;

MERGE INTO C1 AS T1
     USING C2 AS T2
       ON T1.KOD = T2.C1KOD
       WHEN MATCHED THEN
            UPDATE SET T1.BORC = T1.BORC + T2.TUTAR

yada EXECUTE BLOCK ile aşağıdaki şekilde;

EXECUTE BLOCK
AS
DECLARE VARIABLE TOPLAM decimal(15,2);
DECLARE VARIABLE C1KOD integer;
BEGIN
  for
  select C1KOD, SUM(TUTAR) FROM C2 GROUP BY C1KOD
  into :C1KOD, :TOPLAM
  do
  update C1 SET BORC = :TOPLAM
  where KOD = :C1KOD;
END
WWW
Cevapla
#4
(11-02-2020, Saat: 13:32)uparlayan Adlı Kullanıcıdan Alıntı: Merhaba,

Firebird konusunda yeniyim, o nedenle absürt sorularımla karşılaşırsanız hoş görün.

A ve B adlı iki tablom var. A tablosundaki bir alanı B tablosundaki başka bir alandan hesaplayıp UPDATE edeceğim. Mesela şunun gibi "sözde" bir kod olsun;

UPDATE  A 
SET     A.FALAN = SUM(B.Filan)
FROM    TABLO1   A
JOIN    TABLO2   B on A.ID = B.FilanID
WHERE   A.BilmemNe = 33

Bunun Firebird'cesi nedir veya bu kodun yaptığını Firebird 2.5 alemindeki karşılığı nedir?

verdiğin örnekte SUM(B.Filan) olmasaydı, işin çok basitti, yani;

UPDATE A
SET A.FALAN = B.Filan
FROM TABLO1 A, TABLO2 B
WHERE A.ID = B.FilanID and A.BilmemNe = 33

ama işin içinde SUM olunca, GROUP BY da oluyor. bu da geçici bir tablo demek

Firebird 2.1 ve üstü kullanıyorsan (aşağısını zaten kullanma artık)
"Global Temporary Tables" (yani genel kullanıma açık geçici tablolar) kullanman lazım.

Yani SUM(B.Filan) kısmını geçici bir tabloya atman, sonra geçici tablo ile UPDATE - JOIN yapman lazım...

Syntax'ı şu şekilde;
(AŞAĞIDAKİLERİ STORED PROCEDURE ŞEKLİNDE VERİTABANINA UYGUN YERLEŞTİRMEN LAZIM)

CREATE GLOBAL TEMPORARY TABLE B_TABLOSU
(
FilanID,
veasire,
filan
)
ON COMMIT PRESERVE ROWS;
COMMIT;

ikinci adım;

INSERT INTO B_TABLOSU
SELECT DISTINCT falan, SUM(filan) AS filan_TOPLAMI
FROM B_TABLOSU
WHERE falan>fismekan
GROUP BY falan

son adım;

UPDATE A
SET A.FALAN = B.filan_TOPLAMI (burası senin SUM kısmın)
FROM TABLO1 A, filan_TOPLAMI B
WHERE A.ID = B.FilanID and A.BilmemNe = 33
Cevapla
#5
FireBird kısmına biraz yabancıyım ama update .. set komutu from desteği sunuyorsa bütün hesaplama işlemlerini burada alt sorgu (subquery) olarak sorgulayıp buradan değerleri getirmek de denenebilir. 
update A set A.FALAN=TBL.FILAN
FROM (
 select A.ID, sum(B.Filan) as FILAN FROM TABLO1   A
 JOIN    TABLO2   B on A.ID = B.FilanID
) TBL
WHERE A.ID=TBL.ID and A.BilmemNe=33
gibi.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Firebird Ağ Yavaşlığı Nedenleri baloglurecep 10 361 26-03-2020, Saat: 10:04
Son Yorum: sadettinpolat
  Firebird DBA Aracı Fesih ARSLAN 3 387 10-02-2020, Saat: 20:47
Son Yorum: mcuyan
  FireBird veri tabanını nereden indirebilirim? Coder 5 3.312 23-01-2020, Saat: 18:50
Son Yorum: delphim
  IBExpert ile Firebird Veri Kurtarma DelphiCanR 5 3.054 07-01-2020, Saat: 10:32
Son Yorum: musakaraderili
  FIREBIRD facebook GROUP daveti softdestek 8 1.138 17-10-2019, Saat: 10:43
Son Yorum: boreas



Konuyu Okuyanlar: 1 Ziyaretçi