1 Son düzenleyen, ugurlu2001 (03.04.2008 16:42:46)

Konu: Update SQL

Öncelikler Merhabalar;

Aşağıdaki sorguda ( EN ALTTAKİ UPDATE ) 3 kayıt güncellemesi gerekiyorken sadece bir ( ilk ) kaydı güncelliyor.  Sebebi ne olabilir?

Visual Fox Pro
UPDATE Sipisl SET Milyem = 787.5, Iscilik = 6, Birim = "USD" WHERE No IN(748, 749, 750)

UPDATE Sipisl SET Tutar = Miktar * Iscilik WHERE No IN(748, 749, 750)
 
SELECT ;
        No, SUM(Miktar) AS Miktar, SUM(Tutar) AS Tutar ;
    FROM Sipisl ;
    WHERE No IN(749,750,748) ;
    GROUP BY No ;
    INTO CURSOR xSiparis
 
UPDATE Siparis SET Siparis.Iscilik = xSiparis.Tutar WHERE Siparis.No = XSiparis.No
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

2 Son düzenleyen, taRKan (03.04.2008 17:06:45)

Re: Update SQL

Visual Fox Pro
Update Siparis Set Iscilik = B.Tutar ;

    From Siparis A Inner Join xSiparis B ;
      On A.No = B.No


veya

Visual Fox Pro
Update Siparis Set Iscilik = B.Tutar ;

    From Siparis A, xSiparis B ;
    Where A.No = B.No
/o---------------------o\
     www.haser.com
\o---------------------o/

3

Re: Update SQL

Tarkan Hocam, öncelikle çok teşekkür ederim.

Bir yerlerde terslik var. Siparis  dosyasındaki ISCILIK field ının tüm recordlardaki değeri; xSiparis CURSOR ünün ilk kaydının TUTAR değerini alıyor. Yani NO kısmındaki eşleştirmeyi dikkate almıyor. Bir türlü anlamlandıramıyorum.  Sorgu çok basit ve okunaklı aslında .

Acaba Table dan diilde; CURSOR dan işlem yapmamla bir ilgisi olabilirmi sorunun?

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

4 Son düzenleyen, ugurlu2001 (03.04.2008 17:40:04)

Re: Update SQL

Tam olarak aşağıdaki şekilde halloldu.

Visual Fox Pro
UPDATE Sipisl SET Milyem = 787.5, Iscilik = 6, Birim = "USD" WHERE No IN(748, 749, 750)

UPDATE Sipisl SET Tutar = Miktar * Iscilik WHERE No IN(748, 749, 750)
 
SELECT ;
        No, SUM(Miktar) AS Miktar, SUM(Tutar) AS Tutar ;
    FROM Sipisl ;
    WHERE No IN(749,750,748) ;
    GROUP BY No ;
    INTO CURSOR xSiparis
 
UPDATE Siparis SET Siparis.Iscilik = xSiparis.Tutar FROM Siparis ;
    Inner Join xSiparis ON Siparis.No = xSiparis.No
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

5

Re: Update SQL

Benim yazdığım update komutumu Siparis tablosunun tüm kayıtlarını mı güncelliyor?
Siparis tablosunda No sahası 748,749,750 olan kaç kayıt varsa o kadarının güncellenmesi gerekiyor!
Acaba başka birşeyleri mi yanlış yapıyorsun?

Sorun kesinlikle cursor olmasından kaynaklanmaz.

/o---------------------o\
     www.haser.com
\o---------------------o/

6 Son düzenleyen, ugurlu2001 (03.04.2008 17:45:18)

Re: Update SQL

ALIAS A, B yerine Full Casting yapınca () halloldu.  Çok tuhaf? Oysa iki kod aynı.

Tarkan Hocam Update 'i genel olarak pek kullanmıyordum, kullansam da JOIN i hiç kullanmıyordum. Artık aklımın bir köşesine iyice not aldım.

Yeniden teşekkür ediyorum.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

7

Re: Update SQL

Benim yazdığımdan farkı ne smile

Not:
UPDATE Sipisl SET Milyem = 787.5, Iscilik = 6, Birim = "USD" WHERE No IN(748, 749, 750)
UPDATE Sipisl SET Tutar = Miktar * Iscilik WHERE No IN(748, 749, 750)

Yerine
UPDATE Sipisl SET Milyem = 787.5, Iscilik = 6, Birim = "USD", Tutar = Miktar * 6  WHERE No IN(748, 749, 750)

Yazsan daha optimize bir kod olur

/o---------------------o\
     www.haser.com
\o---------------------o/

8

Re: Update SQL

Çok kısa zaman farklarıyla mesajları göndermişiz konu sıralaması biraz karışık olmuş smile
Acaba senin A veya B şeklinde bir cursorun mü oluşuyor işlem sırasında
A ve B yerien A1, B1 gibi yapıp da deneyebilirsin.

/o---------------------o\
     www.haser.com
\o---------------------o/

9

Re: Update SQL

Bende onu söylüyorum. Hiç bir farkı yok, ama bir şekilde tüm field lar update oldu. Allahtan yedek data üzerinde işlem yapıyordum.

Kod optimizasyonunu not aldım. REPLACE den kalan kötü bir alışkanlık. Baze önemsemiyorum ama data boyutu büyünce sonuç ZAMAN olarak geri dönüyor.  Çok daha fazla bekliyorsun.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü