Ms SQL Inner Join Sıkıntısı
-
herkese selam farklı tablodan veri çekiyorum eşleştirerk ama benim 1 tablom için eşleşmeyenleride göstermem lazım
1.TABLOM CAGRILAR
bu tabloda NUMARA,TARIH,HATNO alanlarım var
2. TABLOM KISILER
burda NUMARA,ADSOYAD,ADRES gibi kişisel bilgilerim var
ben herhangi bir çağrı geldiğimde cagrilar tablosundaki numara ile kisilerdekini birleştirip çekiyorum ama numara kayıtlı olmadığında bu bilgiler gelmemekte
cagrilar tablomda 3 adet kayıt vardır burdaki numaralardan 2 adeti kisiler tablosundaki numaralar ile eşleşmektedir. bu sayede numara üzerinden aynı tablodan kişi bilgileride geliyor
Sorgum ;
SELECT * FROM CAGRILAR INNER JOIN KISILER ON
CAGRILAR.NUMARA=KISILER.CEPTEL OR CAGRILAR.NUMARA=KISILER.EVTEL
OR CAGRILAR.NUMARA=KISILER.ISTEL
ama bu şekilde sorgulattığım için kisiler tablosunda numara bulamayınca o kayıt gelmiyor.
bu sorunun nasıl üstesinden gelebilrim
-
left join olayını araştır.
-
tam olarak hangisinde olmayan gözükmüyor anlamadım ama ya LEFT JOIN çözücek işini yada RIGHT JOIN
-
birşey sorucam,
şu join gerektiren yerlerde ben selectle çift tablo çekip where de gerekli bilgilerin eşitiğni kontrol ettirerek çift tablo çekiyorum, bunun joinden ne farkı var? misal
select hede.bilgi hede,hodo where hede.id = hodo.id and hede.isim = 'mehmet'
tarzı
-
nessaj bunu yazdı:
-----------------------------birşey sorucam,
şu join gerektiren yerlerde ben selectle çift tablo çekip where de gerekli bilgilerin eşitiğni kontrol ettirerek çift tablo çekiyorum, bunun joinden ne farkı var? misal
select hede.bilgi hede,hodo where hede.id = hodo.id and hede.isim = 'mehmet'
tarzı
-----------------------------performans
-
çok farkediyor mu peki?, çok zahmetli oluyor join kullanmak o yüzden bu şekilde kullanıyorm ben
-
farkediyor hocam belki 1-2 veri varken yada tek sorguda farketmezsin ama verilerini arttır test et phpmyadminden sorgu döndürüp
-
http://www.ontedi.com/sql/right-outer-join-ornegi-1.html
İşini görebilir.
-
Bu CAGRILAR tablom
CAGRIID NUMARA TARIH HATNO CEVAPSIZ CNOT
11111 2012-02-24 00:00:00.000 1 1 NULL
22222 2012-02-22 00:00:00.000 1 0 Tekrar Aranacak
455555 2012-02-20 00:00:00.000 1 1 NULL
Bu KISILER tablom
KISIID ADSOYAD CEPTEL
1 Yiğit 1111
2 Aytaç 2222
3 Yusuf 3333
SELECT * FROM CAGRILAR INNER JOIN KISILER ON CAGRILAR.NUMARA=KISILER.CEPTEL
şimdi ben bu sorguyu çalıştırdığımda çağrılar tablomdaki 3. sonuç kişiler tablosundakiyle eşlemediği için gelmiyor ama ben eşleşmese bile adsoyad ceptel kisi id gibi alanların boş çıkmasını istiyorum. kısaca kişiler tablosu önemli değil ama cagrılar tablosunda kişiyle eşleşme bulamasa bile null yada boş çıkmasını istiyorum
-
nessaj bunu yazdı:
-----------------------------birşey sorucam,
şu join gerektiren yerlerde ben selectle çift tablo çekip where de gerekli bilgilerin eşitiğni kontrol ettirerek çift tablo çekiyorum, bunun joinden ne farkı var? misal
select hede.bilgi hede,hodo where hede.id = hodo.id and hede.isim = 'mehmet'
tarzı
-----------------------------Join işlemi birinci tabloyu tararken, sağdaki tabloyu indexine göre arayarak tek sqlde sonucu döndürür.
İçi içe sql işlemi birinci sorguyu tamamen bitirdiğinde ikinci sqle geçer
Dolayısıyla birinde 1 sql calışırken diğerinde 2 sql calışıyor
