SELECT IN SELECT KOMUTUNDA SORUN

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
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

SELECT IN SELECT KOMUTUNDA SORUN

Mesaj gönderen adelphiforumz »

S.A.

Table_1 ve Table_2 adında 2 tablom var
her bir tablo içerisinde 1 adet field var bunlar
Table_1(a1)
Table_2(b1)

iclerindeki kayıtlar

Table_1(a, b, c)
Table_2(a, c, Null)

Aşağıdaki gibi bir sorgu yazdığımda hiç bir sonuç dönmüyor

Kod: Tümünü seç

SELECT     a1
FROM         Table_1
WHERE     (NOT (a1 IN
                          (SELECT     b1
                            FROM          Table_2)))
Fakat Sorgu cümlesini şu şekilde değiştirdiğimde sadece b sonucu dönüyor ve herşey normal çalışıyor

Kod: Tümünü seç

SELECT     a1
FROM         Table_1
WHERE     (NOT (a1 IN
                          (SELECT     b1
                            FROM          Table_2
                            WHERE      (NOT (b1 IS NULL)))))
Bunun nedenini bileniniz varmı
Teşekkürler;
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: SELECT IN SELECT KOMUTUNDA SORUN

Mesaj gönderen sabanakman »

SQL sorgular Null ile işleme giren değerleri görmezden gelmektedir. Aşağıdaki örneği çalıştırıp bunu görebilirsiniz. Aslında bu durumun in sorgusunda da devam etmesi ilginç olmuş :shock: .

Kod: Tümünü seç

Select 1+0, 1+Null, isNull(1+Null,0), 1+isNull(Null,0)
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: SELECT IN SELECT KOMUTUNDA SORUN

Mesaj gönderen adelphiforumz »

S.A.
Daha ilginc bir tespitim var nedenini tam olarak bilmiyorum fakat bir kaç farklı SQL de denedim ve hep aynı sonuç çıkıyor.

Eğer b tablosundaki b1 alanı özelliklerindeki "Allow Null" değeri "Yes" ise ve satır içerisinde null varsa o satır hariç geri kalan satırlar sorgu sonucu dönüyor.
fakat "Allow Null" değeri "No" ise ve içeride null kayıt bir nedenden dolayı varsa (Olmaması gerekir fakat bazen olabiliyor) ozaman sorgu sonucu tamamen NULL oluyor.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: SELECT IN SELECT KOMUTUNDA SORUN

Mesaj gönderen Hakan Can »

SQL'in en önemli ve en kavraması zor kavramlarından birisidir NULL.

NULL demek "bilinmeyen" demek (NULL means UNKNOWN) diye düşünürseniz daha iyi kavrayabilirsiniz NULL olayını. Yani herşey de olabilir, hiçbirşey de.

Bir de "..ise ve içeride null kayıt bir nedenden dolayı varsa (Olmaması gerekir fakat bazen olabiliyor) ozaman sorgu sonucu tamamen NULL oluyor..." demişsiniz.
Bu dediğiniz FireBird'de olabiliyor (dökümanlarında belirtiyorlar zaten) ancak MS-SQL Server buna müsade etmez. Muhtemelen NULL diye düşündüğünüz değerler "Boş" (EMPTY) değerlerdir. Anlamak için kabaca şöyle bir SQL komutu yazabilirsiniz: SELECT a1 FROM Table1 WHERE a1 = ''.

Kolay gelsin.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: SELECT IN SELECT KOMUTUNDA SORUN

Mesaj gönderen adelphiforumz »

ikinci verdiğim örnekte dikkat ederseniz
WHERE (NOT (b1 IS NULL))))) şeklinde bir koşul yer alıyor.
buda olanın bir şekilde null olduğunu gösteriyor çünkü bu ifadeyi koyduğumda
sorgu doğru çalışyor
ayrıca is null idyerek sorgulayarak dosyada null olduğunu farkına vardım ve bunun üzerine bu ifadeyi yerleştirdim.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Cevapla