MySQL’de Çift Yönlü Dış Birleşimi Masterlamak

İlişkisel veritabanları ile çalışırken, paylaşılmış özellikler temelinde tabloları birleştirme yeteneği kritik öneme sahiptir. Ancak, MySQL, genellikle “tam dış birleşim” olarak adlandırılan çift yönlü dış birleşimi gerçekleştirmek söz konusu olduğunda bir zorluk yaratır. Bu sorunu detaylı bir şekilde inceleyelim ve istenilen sonuçları elde etmek için çözümü ortaya çıkaralım.

Sorunun Anlaşılması

A ve B adında iki tabloyu düşünelim, aşağıdaki verilere sahip:

Tablo A

itemid mark
1 5
2 3

Tablo B

itemid mark
1 3
3 5

Amaç, itemid‘ye göre bu tabloları birleştirmek ve her iki tablodan da tüm itemid‘leri içeren sonuçlar elde etmek, eşleşen markalar varsa onları da dahil etmektir. Beklenen çıktı şöyle görünmelidir:

itemid A.mark B.mark
1 5 3
2 3 NULL
3 NULL 5

MySQL’in Sınırlamaları

Not edilmesi gereken önemli bir nokta, MySQL’in yerel olarak tam dış birleşimi desteklememesidir. Belgelerine göre, bu işlevselliğe ihtiyaç duyan kullanıcılar dolaylı yollara başvurmak zorundadır. Neyse ki, UNION operatörü kullanarak basit bir çözüm vardır.

Çözüm

MySQL’de bir tam dış birleşimi simüle etmek için hem bir sol birleşim hem de bir sağ birleşimi aşağıdaki SQL sorgusunu kullanarak birleştirebilirsiniz:

SELECT *
FROM A LEFT JOIN B ON A.itemid = B.itemid
UNION ALL
SELECT *
FROM A RIGHT JOIN B ON A.itemid = B.itemid
WHERE A.itemid IS NULL

Sorgunun Parçalarına Ayrılması

  1. Sol Birleşim:

    • Birliğin ilk kısmı bir sol birleşimdir. Bu, tablodan A tüm kayıtlarını, B tablosundaki eşleşen kayıtlarla birlikte alır.
    • Eşleşme olmadığı durumlarda, B tablosundan gelen sonuç NULL olarak gösterilecektir.
    SELECT *
    FROM A LEFT JOIN B ON A.itemid = B.itemid
    
  2. Sağ Birleşim:

    • Birliğin ikinci kısmı bir sağ birleşim gerçekleştirir ve B tablosundaki tüm kayıtları ve yalnızca A tablosundaki eşleşen kayıtları yakalar.
    • WHERE A.itemid IS NULL koşulu, yalnızca A tablosunda karşılık gelen bir eşleşmesi olmayan satırları dahil ettiğimizden emin olur ve böylece tekrarları önler.
    SELECT *
    FROM A RIGHT JOIN B ON A.itemid = B.itemid
    WHERE A.itemid IS NULL
    
  3. Sonuçları Birleştirme:

    • UNION ALL kullanarak, her iki sorgunun sonuçlarını birleştiriyoruz. Bu, her iki tablodan da tüm itemid’lerin kapsamlı bir görünümünü elde etmemizi sağlar ve gerekli yerlerde kaybolan markaları doldurur.

Sonuç

MySQL, çift yönlü (veya tam) dış birleşimleri yerleşik olarak desteklemediğinden, sol ve sağ birleşimlerin bir arada kullanılması ve UNION operatörü ile bu istenen sonuçların etkili bir şekilde elde edilmesine olanak tanır. Bu çözüm, birden fazla tablodan veri entegrasyonu için daha etkin bir yöntem sunar ve veritabanı sorgularınızdan kapsamlı içgörüler elde etmenizi sağlar.

Artık MySQL’de dış birleşimleri güvenle ele alabilir ve uygulamalarınızda etkili veri yönetim gücünden yararlanabilirsiniz!