• 09-10-2013, 19:00:40
    #1
    Mrb;

    Üç tedarikçinin toplamından oluşan bir tablom (urunler) var. Her gün tedarikçiden gelen bilgiler bu tablo içinde ürün koduna (urunkodu) bağlı olarak güncelleniyor. Nereden aktarıldığı belli olsun diyede urunler tablosunda "tedarikci" alınında tedarikçi ayrıca belirtiliyor. Sıkıntım bazen toptancı daha önce satışa sunduğu ürünü tedarik edemediği için listeden çıkartıyor olması. Nasıl bir sql kodu yazmalıyım ki tedarikçiden gelen tablo ile urunler tablosunu tedarikci alınana göre karşılaştırsın ve fazla olan ürünler silinsin.
  • 10-10-2013, 09:12:24
    #2
    daha açık anlatır mısın? bugün listeyi çektin 100 ürün var yarın çektin 90 ürün var dün eklediğin ve bgün olmayan 10 ürünün silinmesini mi istiyorsun
  • 10-10-2013, 12:27:27
    #3
    zinan adlı üyeden alıntı: mesajı görüntüle
    daha açık anlatır mısın? bugün listeyi çektin 100 ürün var yarın çektin 90 ürün var dün eklediğin ve bgün olmayan 10 ürünün silinmesini mi istiyorsun
    Aynen öyle. Extra tek bir durum var. Urunler tablosunda 100 değil 300 ürün var diyelim. Bu üçyüz ürünün 100 tanesi "x" tedarikçisinden gelme ve bu tedarikçi hanesinde eklenirken otomatik olarak "x" olarak belirtilmiş durumda. 300 üründen x tedarikçisine ait 100 ürünü bulup bugünkülerle karşılaştıracak ve listeden çıkarılmış 10 ürünü bulacak kod lazım bana.
  • 10-10-2013, 16:36:37
    #4
    şimdi burda yalın SQL tek başına yetmez çünkü bugün gelen veri henüz herhangi bir tabloya kayıt edilmedi. daha kayıt esnasında bu kontrolü yapabilirsin bu sefer de gelen kayıtlar arasında silinecek olanlar olmadığı için yine işlem devam eder. bence en basit yol olarak geçici tablo gibi gözüküyor. bugün gelen kayıtları bir geçici tabloya atarsın misal urunler_temp, daha sonra ürünler tablondakilerle karşılaştırırsın. delete from urunler u where u.urunno not exists (select ut.urunno from urunler_temp ut)
  • 10-10-2013, 17:47:23
    #5
    zinan adlı üyeden alıntı: mesajı görüntüle
    şimdi burda yalın SQL tek başına yetmez çünkü bugün gelen veri henüz herhangi bir tabloya kayıt edilmedi. daha kayıt esnasında bu kontrolü yapabilirsin bu sefer de gelen kayıtlar arasında silinecek olanlar olmadığı için yine işlem devam eder. bence en basit yol olarak geçici tablo gibi gözüküyor. bugün gelen kayıtları bir geçici tabloya atarsın misal urunler_temp, daha sonra ürünler tablondakilerle karşılaştırırsın. delete from urunler u where u.urunno not exists (select ut.urunno from urunler_temp ut)
    Hızlı çözüm olması adına yükü SQLe atmak istedim. İlk fırsatta verdiğin kodu deneyip sonucu yazacağım. Olmadı dediğin gibi farklı çözümlere bakacağız artık.

    Çok sağol yardımların için.
  • 10-10-2013, 20:20:02
    #6
    delete from urunler u where u.urunno not exists (select ut.urunno from urunler_temp ut)

    olmadı malesef
  • 12-10-2013, 11:48:37
    #7
    zaten o kodu örnek olması açısından yazdım direk çalışacağı konusunda garanti veremem. ama bu yöntem işini görür diye düşündüm.