SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)
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ı?
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ı?
Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)
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..



Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)
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ı.
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ı.
Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)
Ben örnek olsun diye yazmıştım.
mssql e göre yazıyorum tabi.
şöYle de olabilir.
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)
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..



Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)
üstad,hızır gibi yetiştin.
kodu çalıştı.
Şimdi 2 sorunumuz var:
1-)
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.
Kod: Tümünü seç
SELECT * FROM URUN WHERE ID NOT IN
(SELECT URUNID FROM SATIS WHERE TARIH BETWEEN T1 AND T2)
Ş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.
Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)
Not exists i de kullanabilirsin.
Bu duruma tam uyan sql ifadesi not exists (olmayanlar) dır.
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) )
Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)
emin_as ellerine sağlık.
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?
.
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
Şimdi listede id,ad alanlarının yanında tarih alanını görünmesi için ne yapmak gerekiyor?
.
Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)
Bugunu yazacaksan
Eger tarih yazısını sen vermek istiyorsan
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 ...
-
- Üye
- Mesajlar: 21
- Kayıt: 14 Ara 2011 02:20
- İletişim:
Re: SQL Ters Sorgu İşlemi (Olmayan değerleri listeleme)
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