select cinsi,(select Sum(miktar) from stok_giris) as toplam_giris,(select Sum(miktar) from stok_cikis) as toplam_cikis,
(select Sum(miktar) from stok_giris)-(select Sum(miktar) from stok_cikis) as stok_miktari from stok where
((select Sum(miktar) from stok_giris)-(select Sum(miktar) from stok_cikis))<>0
parantezler içindeki select sorguları değişkenlere atayabilsem tekrar tekrar çalıştırmaya gerek kalmayacak ve hızı arttıracak.
Tabi bunu örnek olsun diye verdim Sql sorgum tam olarak bu değil biraz daha karışık.
İstediğim bu durumda değişken kullanılabilirmi ?
select cinsi, (select Sum(miktar) from stok_giris) as toplam_giris,//burda sum sonunucu dönen değer (select Sum(miktar) from stok_cikis) as toplam_cikis,//ve burdaki değer değişkene atılabilirse
(selectSum(miktar) from stok_giris)-(selectSum(miktar) from stok_cikis) as stok_miktari from stok where ((select Sum(miktar) from stok_giris)-(select Sum(miktar) from stok_cikis))<>0 //burada tekrardan aynı sorgular kullanılmazdı
Yok arkadaşlar ben istediğimi anlatamıyorum..
Verdiğiniz cevaplar için teşekkür ederim ama istediğim şey değil.
yukarda yazdığım Sql tek bir sorgu iki farklı sorgu yok ki ben aradaki alt sorgudan dönen değeri bir değişkene aktarıp ikinci bir kez veri tabanına bir sorgu göndereyim.
Yukardaki sorgu çalışıyor ama yavaş çünkü sonuca gitmek için aynı alt sorguyu 3 kez kullanmışım.
Ben bir kere alt sorgu kullanıp burdan dönen değeri bir değişkene atıp ikinci sefer alt sorgu kullanmamak istiyorum. buda zannedersem olamayacak gibi görünüyor.
select
T1.cinsi,
T1.toplam_giris,
T1.toplam_cikis,
T1.toplam_giris-T1.toplam_cikis as stok_miktari
FROM (select
cinsi,
(select Sum(miktar) from stok_giris) as toplam_giris,
(select Sum(miktar) from stok_cikis) as toplam_cikis
from stok
) T1
where T1.toplam_giris-T1.toplam_cikis <> 0
Gerçi hız sorununu index'lerle veya alternatif SELECT query'leri ile halletmeyi deneyebilirsin. Zira VT'ler aynı olan işleri normalde tekrar tekrar yapmazlar.
select cinsi, (select Sum(miktar) from stok_giris) as toplam_giris,//burda sum sonunucu dönen değer (select Sum(miktar) from stok_cikis) as toplam_cikis,//ve burdaki değer değişkene atılabilirse
(selectSum(miktar) from stok_giris)-(selectSum(miktar) from stok_cikis) as stok_miktari from stok where ((select Sum(miktar) from stok_giris)-(select Sum(miktar) from stok_cikis))<>0 //burada tekrardan aynı sorgular kullanılmazdı
Aslında zaten kullanılmaması lazım. Veritabanı motorunda optimizasyondan sorumlu kodun sorgu içinde zaten hesapladığı bu değeri aynen where sorgusuna da yansıtması ve bunu bir kere hesaplaması gerekir.
Bahsettiğin gibi sorguyu bölmenin hız sağlamaktan çok kaybettireceğini düşünüyorum.
Cevaplarınız dan dolayı çok teşekkür ederim
Benim öğrenmek istediğim yapılıp yapılamayacağı idi. Hakan hocam sağ olsun Firebird 2.0 de yapılıyormuş öğrendik. Benim için bilinmesi gereken bir alternatif olacak.
Teşekürler.