İki tabloyu karşılaştırıp olmayan kayıtları listeleme

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

İki tabloyu karşılaştırıp olmayan kayıtları listeleme

Mesaj gönderen ASE »

Kod: Tümünü seç

TABLE CARIHESAP (
    ID                    INTEGER NOT NULL,
    FIRMA_NO              INTEGER NOT NULL,
    AD                    KARAKTER,
    VERGIDAIRESI          KARAKTER,
    VERGINO               KARAKTER,
);


TABLE TAHSIL (
    ID               INTEGER NOT NULL,
    FIRMA_NO         INTEGER,
    CH_ID            INTEGER NOT NULL,
    TAHSILNO         SAYI,
    TAHSILYILI        KARAKTER,
    ALINAN_YTL       PARABIRIMI,
);
Yukarıdaki gibi iki tablom var. Birinci tablodaki id alanı ve ikinci tablodaki ch_id alanları ile ilişki kuruluyor. Yılda sadece 1 kez tahsilat yapılyor carihesaptan. Bu yıl içinde tahsilat yapılmayan kişilerin listesini nasıl alacağım konusunda yardıma ihtiyacım var.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kod: Tümünü seç

select * from carihesap ch
where id not in (select ch_id from tahsil t where t.ch_id = ch.id)
* yerine istenilen alan adaları yazılması perfomans açısından önemlidir :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

Recep abi ellerine sağlık. Ama bu kod değil aradığım. Bu kod ch deki id nin tahsilde olup olmadığına bakıyor. Ama bana lazım olan 2005 veya 2006 yılında ödeme yapmayanlar dediğimde bu listeyi verecek kod lazım. Ben bunu bi türlü yapamadım.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

içteki select in where ine yılı da eklemen lazım.

Kod: Tümünü seç

select * from carihesap ch
where id not in (select ch_id from tahsil
                 where ch_id = ch.id and extract(year from tarih_alani) in (2005, 2006) )
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

Evet Recep Abi yine çözemedim problemi.
Soruyu şöyle değiştireyim ben. Tahsil tablosunda aidatyılı kısmında 2006 olanlar hariç Carihesap tablosundaki herkesi göstermek istiyorum.
Sen dün yediğin cağ kebabın üstüne bunu çözersin gibi geliyor. Biliyorum kişiye özel oldu soru ama sadece sen cevap verdiğin için ben de sana hitap ettim....

Teşekkürler...
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

:lol: Kebabın etkisi o kadar uzun sürmüyor ki :wink:

Kod: Tümünü seç

select * from carihesap ch
where id in (select ch_id from tahsil
                 where ch_id = ch.id and extract(year from tarih_alani) not in (2006) )
Bu şekilde yada in ile not in leri değiştirirsen olmalı :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

...
En son Hakan Can tarafından 08 Tem 2006 12:19 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

Arkadaşlar tablo yapısını yukarıda yazdım ya.
Tarih alanı yok.

Kod: Tümünü seç

TAHSILYILI        varchar(4),


şeklinde sadece yıl tutuluyor bu alanda. 2001,2002,...,2006 gibi.
Ben bi çok şekilde deneme yapmama rağmen halâ doğru sonuca ulaşamadım.
Yani exract year gibi bir koda da gerek yok.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kod: Tümünü seç

select * from carihesap ch
where id in (select ch_id from tahsil
                 where ch_id = ch.id and tahsilyili <> '2006' )
Bu şekilde işini görmesi gerkir diye düşünüyorum. :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

Kod: Tümünü seç

select ID,  AD from carihesap
where carihesap.id not in (select ch_id from tahsil
where ch_id = carihesap.id and tahsil.aidatyili  in ('2006'))
and carihesap.FIRMA_NO = 99
gibi bir kodla istediğimizi elde ettik.
Allah razı olsun
Herşey için sağolun...
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Cevapla