none
İki tabloyu birleştirme RRS feed

  • Soru

  • Merhaba,

    Aşağıdaki gibi örnek iki tablo bulunmakta;

    Tablo1:

    il_kodu; il_adi; ilce_adi; katsayi

    05; Amasya; Merkez; 5

    05; Amasya; Merzifon; 10

    06; Ankara; Merkez; 2

    06; Ankara; Çankaya; 3

    06; Ankara; Sincan; 7

    Tablo2:

    il_kodu; kurum_adi

    05; İl Afet Kurumu

    05; Merzifon Belediyesi

    06; İl Afet Kurumu

    06; Çankaya Belediyesi

    06; Sincan Belediyesi

    06; İl Milli Eğitim Müdürlüğü

    Bu iki tabloyu iki tablodaki il_kodu ve Tablo1'deki ilce_adi ile Tablo2'deki kurum_adi nın ilk kelimesini alarak birleştirmek istiyorum. Eğer Tablo2'deki kurum_adi ndaki ilk kelime Tablo1'deki bir ilçe adına denk gelmezse o ildeki Merkeze eşit olmasını istiyorum.

    Sorguyu aşağıdaki gibi yazdım ama istediğim sonucu alamadım.

    SELECT t1.il_kodu, t1.il_adi, t1.ilce_adi, t2.kurum_adi, t1.oran

    FROM Tablo1 as t1

    INNER JOIN Tablo2 as t2

    ON t1.il_kodu = t2.il_kodu AND ( t1.ilce_adi = ( LTRIM(RTRIM(SUBSTRING(t2.kurum_adi, 0, CHARINDEX(' ', t2.kurum_adi+' ')))) OR t1.ilce_adi = 'Merkez' )

    Sorun herhangi bir ilçe adı ile başlamayan (örn: İl Milli Eğitim Müdürlüğü) kurum adlarında. Bunların Merkeze eşit olması gerekiyor. Ayrıca İlçe adı ile başlayanlar da Tablo1 deki hem o ilçenin olduğu satır ile hem de Merkezin olduğu satır ile eşleniyor.

    Sorguyu düzenlemek için yardımlarınızı bekliyorum.

    9 Ağustos 2017 Çarşamba 18:12

Yanıtlar

  • Merhaba,

    Farklı tablolarındaki kayıtları eşleştirmek için kullanmak istediğin bu yöntem çok başını ağrıtır. Her şeyden önce performans açısından çok sorunlu bir yöntem bu. Join ve Where Predicate'lerinin indekslerden azami derecede yararlanmasını istersen, ki istersin, o zaman Predicate'lerde Function kullanmaman gerekir.

    Diğer nokta ise kodlama açısından hiç pratik bir yöntem olmaması, ama performans ile kıyasladığında bu neredeyse önemsiz kalıyor.

    Sana tavsiyem, mesela belediyeler, müdürlükler, kurumlar vd. için farklı tip numaraları kullanman ve eşleştirmeleri buna göre yapman. Böylece kelimeleri değil, sayısal kodları eşleştirirsin. Hem çok daha performanslı olur, hem de böyle bilmece-bulmacalarla uğraşmamış olursun.


    http://ekremonsoy.blogspot.com | http://www.ekremonsoy.com | @EkremOnsoy

    • Yanıt Olarak İşaretleyen Ekrem Önsoy 28 Eylül 2017 Perşembe 09:20
    4 Eylül 2017 Pazartesi 10:17

Tüm Yanıtlar

  • Merhaba,

    Direk tablo 2 ile joinlemek yerine , tablo 2 üzerine bir view oluşturup , select inde koşul yazıp , eğer ilçe ismi yazmaz İl Milli Eğitim Müdürlüğü gibi isimlerde Merkes yazmasını sağlar , sonra bu view i joine ekleyebilirsin. Yada benzer yapıda joinde subquery ekleyip , bu dediğim düzenlemeleri subquery de yapıp o şekilde yapabilirsin. 

    10 Ağustos 2017 Perşembe 19:17
  • Merhaba,

    Farklı tablolarındaki kayıtları eşleştirmek için kullanmak istediğin bu yöntem çok başını ağrıtır. Her şeyden önce performans açısından çok sorunlu bir yöntem bu. Join ve Where Predicate'lerinin indekslerden azami derecede yararlanmasını istersen, ki istersin, o zaman Predicate'lerde Function kullanmaman gerekir.

    Diğer nokta ise kodlama açısından hiç pratik bir yöntem olmaması, ama performans ile kıyasladığında bu neredeyse önemsiz kalıyor.

    Sana tavsiyem, mesela belediyeler, müdürlükler, kurumlar vd. için farklı tip numaraları kullanman ve eşleştirmeleri buna göre yapman. Böylece kelimeleri değil, sayısal kodları eşleştirirsin. Hem çok daha performanslı olur, hem de böyle bilmece-bulmacalarla uğraşmamış olursun.


    http://ekremonsoy.blogspot.com | http://www.ekremonsoy.com | @EkremOnsoy

    • Yanıt Olarak İşaretleyen Ekrem Önsoy 28 Eylül 2017 Perşembe 09:20
    4 Eylül 2017 Pazartesi 10:17