none
SQL Full Join ve NULL row basma RRS feed

  • Soru

  • Dijital bir defter için geliştirdiğim uygulamada excel dökümü yapmam gerekiyor.

    Tablo yapıları ve program tamam.

    Yalnız birden çoka durumlarla birbirine bağlanmış tablolarda JOIN işlemi uygularken ROW sayısı en yüksek tablosun sayısı kadar diğer tablolar veriyi tekrar ediyor. Bu zaten bilindik bir durum. Daha önceden aynı başlıklı bir konuyu birbirine bağlı 2 tablo için Çetin hocam çözmüştü. yalnız bu sefer söz konusu 4 tablo. Aynı zamanda her tablo için bir de şart eklenmesi gerekiyor. (örneğin A tablosunda Visibility kolonu true olan B tablosundaki tarih alanı X ile Y arasında olan).

    Eski Konu : Link

    Ben çetin hocamın ilk çözümünü bu soru için kullanamadım. Konuyu güzel anlatmak için bir şema haline getirdim.


    • Düzenleyen HasanYaman 1 Haziran 2015 Pazartesi 15:03
    1 Haziran 2015 Pazartesi 15:01

Yanıtlar

  • Burak bey gecikme için kusura bakmayın. Dediklerinize katılmakla birlikte ben sorunu şöyle çözdüm.

    3 tabloyu da Anatabloya bağladığımda yani ikisini CeraimID üzerinden birini de SupheliID üzerinden,aralara nedenini belirleyemediğim bir şekilde tamamıyla NULL Rowlar atıyor. Bu büyük bir ihtimalle aynı CeraimID ye bağlı tabloların farklı row sayılarından kaynaklanıyor.

    Çözüm; İlk Ceraim tablosuyla Mağdurlar tablosunu CeraimID üzerinden bağladım. Ama join ile değil. Mağdurlar tablosunda aynı CeraimID ye bağlı rowları ilk başta SQL STUFF fonksiyonu ve XML kullanarak  bağladım ve kolonları tek bir kolon gibi birleştirdim. Böylece x ceraimid ye sahip mağdurlar tablosunun rowları şöyle bir görünüm aldı (Ceraim tablosu içinde bir kolon olarak düşünün mesela Magdurlar genel bilgi)

    Col1+Col2+Col3 , Col1+Col2+Col3 , Col1+Col2+Col3

    daha sonra her şüpheliye bağlı bir işlem olacağı için Şüpheli ile İşlem tablosunu Join ledim ve onu da tek bir tablo ile Ceraim ID üzerinden (şüpheli tablosundan gelen CeraimID) ana tabloyla birleştirdim.

    Bu haliyle istediğim çözüme ulaştım. Performans açısından da bir problem yok.

    Değerli cevabını için tekrar teşekkür ederim.

    3 Haziran 2015 Çarşamba 21:48

Tüm Yanıtlar

  • Burada 4 tablo birbirine bağlı değil. Mağdur sadece ceraim'e bağlı. Şüpheli de sadece ceraim e bağlı. İşlem de birinci derecede sadece şüpheliye bağlı. (ceraim'e olan bağ ayrı bir konu)

    Şu halde 4 ünü birden joinlersen istediğin çıktıyı elde edemezsin. 

    Ceraim i ayrı çek, Mağduru da ayrı çek. Şüpheli ve işlemi de joinleyip çek. Burada işlem tablosunda bir şüpheli hakkında birden fazla kayıt varsa, artık senaryona göre son işlemi vs çekmen gerek her şüpheli hakkında.


    Burak SARICA

    2 Haziran 2015 Salı 12:43
  • Burak bey gecikme için kusura bakmayın. Dediklerinize katılmakla birlikte ben sorunu şöyle çözdüm.

    3 tabloyu da Anatabloya bağladığımda yani ikisini CeraimID üzerinden birini de SupheliID üzerinden,aralara nedenini belirleyemediğim bir şekilde tamamıyla NULL Rowlar atıyor. Bu büyük bir ihtimalle aynı CeraimID ye bağlı tabloların farklı row sayılarından kaynaklanıyor.

    Çözüm; İlk Ceraim tablosuyla Mağdurlar tablosunu CeraimID üzerinden bağladım. Ama join ile değil. Mağdurlar tablosunda aynı CeraimID ye bağlı rowları ilk başta SQL STUFF fonksiyonu ve XML kullanarak  bağladım ve kolonları tek bir kolon gibi birleştirdim. Böylece x ceraimid ye sahip mağdurlar tablosunun rowları şöyle bir görünüm aldı (Ceraim tablosu içinde bir kolon olarak düşünün mesela Magdurlar genel bilgi)

    Col1+Col2+Col3 , Col1+Col2+Col3 , Col1+Col2+Col3

    daha sonra her şüpheliye bağlı bir işlem olacağı için Şüpheli ile İşlem tablosunu Join ledim ve onu da tek bir tablo ile Ceraim ID üzerinden (şüpheli tablosundan gelen CeraimID) ana tabloyla birleştirdim.

    Bu haliyle istediğim çözüme ulaştım. Performans açısından da bir problem yok.

    Değerli cevabını için tekrar teşekkür ederim.

    3 Haziran 2015 Çarşamba 21:48