Örnek senaryomuz, AdventureWorks üzerinden AltKategorileri 'G' ile başlayan ürünleri silmek istensin bizden. Gördüğünüz gibi, tek tablo işimizi görmüyor. Product tablosundan kayıt sileceğiz ama, bu tablo üzerinden AltKategori isimlerine erişemiyoruz. İşte burada yapmamız gereken şey, iki tabloyu birleştirip, silme işlemini gerçekleştirmek. Bunun için yazmamız gereken kod şu şekilde olmalıdır;
DELETE FROM Production.Product
FROM Production.Product p INNER JOIN Production.ProductSubcategory ps on p.ProductSubcategoryID = ps.ProductSubcategoryID
WHERE ps.Name like 'G%'
Gördüğünüz gibi, önce hiçbir şart yokmuş gibi DELETE FROM Production.Product diyorum, daha sonra da belirtilen şartı sağlamak için joinleme işlemi yapıyorum. Bunun sonucunda, 6 kayıdın Product tablosundan silindiğini görürüz.
Not: Delete sorgusunu kullanarak, birden fazla tabloda veri silmek mümkün değildir. Bunun için birden fazla delete sorgusu çalıştırılmalıdır.
3 yorum:
sondaki NOT'unuz çok yarar sağladı bana, teşekkürler.
Merhabalar. Sondaki notunuzu okudum.
DELETE c, d,g, i, o, p, pr, t
FROM comments c, discounts d, products p, productid pr, images i, gifts g, onecikan o, tags t
WHERE i.productID='359'
AND p.id='359'
AND c.productID='359'
AND d.productID='359'
AND g.productID='359'
AND o.productID='359'
AND pr.productID='359'
AND t.productID='359'
gibi bir kodum var. Örneğin comments tablosunda 359 productID'ye ait veri yok.. Bu sorguyu döndürdüğümüzde 0 sonuç alıyor..
Bunu öteki tablolardan bağımsız olarak diğer tablolarda silme işlemini yapamıyor muyuz?
Sonda verdiğiniz notun cevabı hayır..
Ancak bu kod ise diğer tabloların hepsinde 359 id'si varsa tüm tablolardan silme işlemini gerçekleştiriyor. Bu nedenle bu sorunun cevabını merak ediyorum.
Faydalı yazı teşekkürler. Disco, sorunun cevabı delete cascade.
Yorum Gönder