iki tablo arasında olmayan kayıtları bulmak

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
AhmetNuri
Üye
Mesajlar: 262
Kayıt: 02 Tem 2007 07:55
Konum: ist
İletişim:

iki tablo arasında olmayan kayıtları bulmak

Mesaj gönderen AhmetNuri »

Merhaba
ikitane tablo var 1. tabloda adı alanında olupta 2. tabloda adı alanında olmayan kayıtları bulamk istiyorum.
Normlde Minus komutu ile yapılması lazım fakat firebirde nasıl çalışacağını anlamadım.
En son AhmetNuri tarafından 06 Nis 2010 02:41 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Ahmet DENİZ
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: iki tablo arasında olmayan kayıtları bulmak

Mesaj gönderen emin_as »

Aşagıdakine benzer bir query işini görür.

Kod: Tümünü seç

select * from tablo1 where tablo1.anakey not exists ( select tablo2.anakey from tablo2)
AhmetNuri
Üye
Mesajlar: 262
Kayıt: 02 Tem 2007 07:55
Konum: ist
İletişim:

Re: iki tablo arasında olmayan kayıtları bulmak

Mesaj gönderen AhmetNuri »

Bu not exists de hata veriyor.
Kod 2 deki gibi çalıştırdı ama sorgu boş dönüyor fakat normalde dönmesi gereken bir iki kayıt var

Kod: Tümünü seç


CREATE VIEW ATEST (
    TEST1,
    TEST2)
AS
SELECT
"test1"."test1_test1","test2"."test2_test2"
FROM
"test1","test2"
where "test1"."test1_test1" not exists(SELECT
"test2"."test2_test2"
FROM
"test2"

)
Hata

Kod: Tümünü seç

fmCompile.quCompile:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 10, column 33.
exists.
Bu şekilde yazınca hata vermedi ama sorgu boş dönüyor
kod 2

Kod: Tümünü seç

CREATE VIEW ATEST (
    TEST1,
    TEST2)
AS
SELECT
"test1"."test1_test1","test2"."test2_test2"
FROM
"test1","test2"
where
 not exists (SELECT
"test1"."test1_test1","test2"."test2_test2"
FROM
"test1","test2"
where
"test1"."test1_test1" = "test2"."test2_test2"
)

Ahmet DENİZ
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: iki tablo arasında olmayan kayıtları bulmak

Mesaj gönderen emin_as »

Aceleden yanlış yazmışım, kusura bakma.
Tam kod şöyle olacak

Kod: Tümünü seç

select * from tablo1 where not exists (select * from tablo2 where tablo2.alan = tablo1.alan)
Exists tek başına kullanılır, herhangi bir select ifadesi kayıt döndürüyorsa true yoksa false olur.
not exists bu ifadeyi tersler, yani bilgi dönüyorsa false, bilgi dönmüyorsa true yapar.

Kullanım:

Kod: Tümünü seç

select * from cari  
          where exists (select * from carihareket 
                                          where carihareket.tarih > '01/03/2010'  
                                                    and cariharaket.carikod =cari.carikod )
2010 martından sonra caride hareketi olan cari lerin listesini verir.

Kod: Tümünü seç

select * from cari  
            where not exists (select * from carihareket 
                                                  where carihareket.tutar > 1000  
                                                            and cariharaket.carikod =cari.carikod )
Cari hareket tablosunda, tutarı 1000 den büyük hareketi olmayan carileri listeler. ( toplam degil tek hareketteki tutar)

Umarım yardımcı olur, sql ini tam anlayamadım, sanırım joinlerle test1 ve test2 birbirine baglaman gerekebilir.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: iki tablo arasında olmayan kayıtları bulmak

Mesaj gönderen freeman35 »

sadece hareket görmüş carileri alacaksanız neden SQL le takla atırıyorsunuzki? master detay bağ var arada, direk hareketi sorgulayın filtreleri uygulayın cari table da ki bir bilgi gerekiyorsa master table hareket, cari table detay olarak join leyin.
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
asilturk
Üye
Mesajlar: 3
Kayıt: 21 Tem 2010 07:55

Re: iki tablo arasında olmayan kayıtları bulmak

Mesaj gönderen asilturk »

örneğin bir stok kart tablomuz var birde stokhareket tablomuz var

STOKHAREKET TABLOSUNDA BULUNMAYAN KAYITLARI BULALIM

SELECT SH.* FROM STOKHARE SH WHERE SH.STOK_ADI NOT IN (SELECT STOK_ADI FROM STOKKART ST WHERE ST.STOK_ADI=SH.STOK_ADI)

STOK HAREKET TABLOSUNDA ADI BULUNAMAYAN STOKKARTLARININ LİSTESİNİ VERİR

UMARIM SORUYU DOĞRU ANLAMIŞIMDIR
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: iki tablo arasında olmayan kayıtları bulmak

Mesaj gönderen aslangeri »

@asiltürk;
lütfen forum kurallarına uyalım.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla