MySQL'de birden çok ilişkili tablodan çoklu veri silmek

 
MySQL  
1551  

Merhaba.

Bu yazımda size MySQL'de birden çok ilişkili tablolarda çoklu veri silme SQL kodunun nasıl yazıldığını göstereceğim.

Genelde birden çok SQL sorgusu yazmak yerine tek bir sorguda işi bitirmek isteriz. Zaten performans için de bu gerekli bir durum.

İlk olarak çoklu silme koduna geçmeden önce standart DELETE FROM komutuna bakalım.

Tek bir tabloda belirli niteliği taşıyan veriyi silen örnek bir SQL kodu şu şekilde olacak:

sql kodu:DELETE FROM kategoriler WHERE kategori_id = 1

Bu komutla bildiğiniz gibi 1 nolu id mevcutsa o kayıt silinecek.

Şimdi şöyle bir senaryo oluşturalım:

Kategoriler, Makaleler ve Yorumlar adında tablolarımız var. Her makalenin bir kategorisi (kategori_id) ve her yorumun bir makalesi (makale_id) olduğunu düşünelim. O halde bir kategori silinirse onunla bağlantılı makalelerin de silinmesi ve o makalelerle ilgili yorumların da silinmesi gerekir. İşte şimdi yazacağım kod bu işe yarayacak.

Öncelikle tablo şu şekilde olduğunu farz edelim:
Kategoriler (kategori_id, kategori_adi)
Makaleler (makale_id, makale_adi, kategori_id)
Yorumlar (yorum_id, yorum_icerik, yorum_yazan_id, makale_id)

sql kodu:DELETE y, m, k FROM kategoriler AS k 
LEFT JOIN makaleler AS m ON m.kategori_id = k.kategori_id
LEFT JOIN yorumlar AS y ON y.makale_id = m.makale_id
WHERE k.kategori_id = '1'

JOIN komutları ile çoklu tablo bağlantıları yapıyorduk. Burada dikkat çeken DELETE - FROM arasındaki y, m, k tablo değişkenleridir. Bunlardan y eksik olsaydı yorumlar silinmeyecekti.

Hepinize kolay gelsin arkadaşlar.