SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 02:05
Konum: istanbul

SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)

Mesaj gönderen dynamo »

URUN ve SATIS olmak üzere 2 tablom olsun.Herhangi bir tarihte satılmayan ürünleri bulmak için URUN tablosunu bir for döngüsü ile baştan tarayıp SATIS tablosunda tarih sorgusu yapıp satış yapılmayan ürünleri temp tabloya dolduruyorum.Şimdi yapmak istediğim döngü kullanarak temp tabloya doldurmadan tek bir sql sorgusu ile bunu nasıl gerçekleştirebilirim?

URUN

id ad
-- ---
1 kek
2 elma
3 nar



SATIS

id urunid tarih
-- ------ -----
1 1 01.01.2010
2 1 02.01.2010
3 2 02.02.2010
4 1 03.01.2010




select * from SATIS where tarih='01.01.2010'

sorgusunu çalıştırdığımda o tarihte saatılan ürünleri gösterir.Sorguda "kek" satıldığı gösterir.Benim istediğim O tarihte satılmayan ürünleri tek bir sql sorgusu bulmak.Bunu yapmanın bir yolu var mı?
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)

Mesaj gönderen conari »

Kod: Tümünü seç

SELECT STOK FROM URUN WHERE NOT STOK IN (SELECT STOK FROM SATIS WHERE TARIH BETWEEN T1 AND T2) 
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 02:05
Konum: istanbul

Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)

Mesaj gönderen dynamo »

conari cevabın işin teşekkürler.Veritabanını yazmayı unutmuşum.Kullandığım veritabanı Firebird.Fakat bu kod çalışmadı.

Verdiğin kodu IBEXPERT da çalıştırdım,hata verdi.verdiği hata:


SELECT STOK FROM URUN WHERE NOT STOK IN (SELECT STOK FROM SATIS WHERE TARIH BETWEEN '25.12.2009' AND '25.12.2009' )


Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
STOK.
At line 1, column 62.

kırmızı işaretli kelimeye konumlanıp bu hatayı veriyor. * koyup denedim yine çalışmadı.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)

Mesaj gönderen conari »

Ben örnek olsun diye yazmıştım.
mssql e göre yazıyorum tabi.

Kod: Tümünü seç

SELECT * FROM URUN WHERE NOT ID IN 
(SELECT URUNID FROM SATIS WHERE TARIH BETWEEN T1 AND T2) 
şöYle de olabilir.

Kod: Tümünü seç

SELECT * FROM URUN WHERE ID NOT IN 
(SELECT URUNID FROM SATIS WHERE TARIH BETWEEN T1 AND T2) 
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 02:05
Konum: istanbul

Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)

Mesaj gönderen dynamo »

üstad,hızır gibi yetiştin.

Kod: Tümünü seç

SELECT * FROM URUN WHERE ID NOT IN 
(SELECT URUNID FROM SATIS WHERE TARIH BETWEEN T1 AND T2)
kodu çalıştı.

Şimdi 2 sorunumuz var:

1-)

Kod: Tümünü seç

SELECT id,ad FROM URUN WHERE ID NOT IN 
(SELECT URUNID FROM SATIS WHERE TARIH BETWEEN T1 AND T2)


ifadesinde listede id,ad alanları gösterir.tarih alanınında gözükmesi için ne yapılmalı?

2-)Bu sql sorgusu temp tabloya doldurma yönteminden yaklaşık 3-4 kat daha yavaş çalıştı.Alanlar indexli.Bu hız sorununu nasıl aşarız?

tekrar teşekkürler.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)

Mesaj gönderen emin_as »

Not exists i de kullanabilirsin.
Bu duruma tam uyan sql ifadesi not exists (olmayanlar) dır.

Kod: Tümünü seç

SELECT * FROM URUN WHERE NOT EXISTS
      (SELECT URUNID FROM SATIS WHERE (TARIH BETWEEN T1 AND T2) and (urun.urunid = satis.urunid)  )
Kullanıcı avatarı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 02:05
Konum: istanbul

Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)

Mesaj gönderen dynamo »

emin_as ellerine sağlık.

Kod: Tümünü seç

SELECT id,ad FROM URUN WHERE NOT EXISTS
      (SELECT URUNID FROM SATIS WHERE (TARIH BETWEEN T1 AND T2) and (urun.id = satis.urunid) order by tarih ) order by ad
kodunda and (urun.urunid = satis.urunid) ifadesi 2. sorunu çözdü.Sorgu sonucu çok hızlı geliyor.

Şimdi listede id,ad alanlarının yanında tarih alanını görünmesi için ne yapmak gerekiyor?

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

Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)

Mesaj gönderen emin_as »

Bugunu yazacaksan

Kod: Tümünü seç

select id,ad, cast ('today' as date) as tarih from urun ..

Eger tarih yazısını sen vermek istiyorsan

Kod: Tümünü seç

select id,ad, '01.03.2010' as tarih  from urun ...  
ballyunuvar
Üye
Mesajlar: 21
Kayıt: 14 Ara 2011 02:20
İletişim:

Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)

Mesaj gönderen ballyunuvar »

conari yazdı:

Kod: Tümünü seç

SELECT STOK FROM URUN WHERE NOT STOK IN (SELECT STOK FROM SATIS WHERE TARIH BETWEEN T1 AND T2) 

Çok teşekkür ederim conari
Cevapla