Alt sorgu?

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
hbulus
Üye
Mesajlar: 163
Kayıt: 14 Tem 2003 11:30
İletişim:

Alt sorgu?

Mesaj gönderen hbulus »

s.a.

Kod: Tümünü seç

select stok_kodu, fisno ,STHAR_TARIH from tblsthar where fisno=(select tblfatuek.fatirsno from tblfatuek
where tblfatuek.acik14='A6227')
Kodumuz normalde problemsiz çalışıyor, ama hesap etmediğim bir sorun çıktı.
alt sorgudan dönen değer çok nadirde olsa birden fazla olunca hata veriyor

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Bu halde ana sorguyu while not ...eof döngüsüne sokmadan tek bir sorguda halledebilir miyiz?
Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: Alt sorgu?

Mesaj gönderen m_ekici »

2. selectten sonra top 1 koyarsan sadece 1. kayıt döner ama doğru kayıt dönmezse ne olacak?

Kod: Tümünü seç

select stok_kodu, fisno ,STHAR_TARIH from tblsthar where fisno=(select top 1 tblfatuek.fatirsno from tblfatuek
where tblfatuek.acik14='A6227')
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Alt sorgu?

Mesaj gönderen conari »

iki tablo arasında bir ilişki var ise JOIN kullan.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
hbulus
Üye
Mesajlar: 163
Kayıt: 14 Tem 2003 11:30
İletişim:

Re: Alt sorgu?

Mesaj gönderen hbulus »

Dediğiniz gibi joinle çözdüm olayı. Lazım olan olursa faydası olsun diye aşağıdaki şekil son durum:

Kod: Tümünü seç

qstokbul2.Close;
qstokbul2.SQL.Clear;
qstokbul2.SQL.Add('select '+netsisdb+'.dbo.tblsthar.stok_kodu,  '+netsisdb+'.dbo.tblfatuek.'+KABULNOALAN+','+netsisdb+'.dbo.tblfatuek.fatirsno, kabul.kabulno, plaka.plaka, plaka.saseno, plaka.musno, plaka.aracadi from kabul inner join ');
qstokbul2.SQL.Add('plaka on kabul.plaka=plaka.plaka');
qstokbul2.SQL.Add('inner join '+netsisdb+'.dbo.tblfatuek on kabul.kabulno='+netsisdb+'.dbo.tblfatuek.'+KABULNOALAN+'');
qstokbul2.SQL.Add('inner join '+netsisdb+'.dbo.tblsthar on '+netsisdb+'.dbo.tblsthar.fisno='+netsisdb+'.dbo.tblfatuek.fatirsno');
qstokbul2.SQL.Add('where saseno like :m');
qstokbul2.SQL.Add(' and  '+netsisdb+'.dbo.tblsthar.stok_kodu like :mm');
qstokbul2.SQL.Add('order by '+netsisdb+'.dbo.tblsthar.fisno asc');
qstokbul2.Parameters[0].Value:='%'+edit1.text+'%';
qstokbul2.Parameters[1].Value:='%'+edit3.text+'%';
QSTOKBUL2.Open;
Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Alt sorgu?

Mesaj gönderen csunguray »

= (eşittir) yerine IN kullanın. Yani:

Kod: Tümünü seç

select stok_kodu, fisno ,STHAR_TARIH from tblsthar where fisno in (select tblfatuek.fatirsno from tblfatuek
where tblfatuek.acik14='A6227')
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Cevapla