CTE(common table expression) kullanarak mükerrer kayıtları silmek
6 Kasım 2016 Pazar
Konuya giriş yapmadan evvel benim daha önce CTE ile ilgili giriş seviyesinde yazmış olduğum makalemi okumanızı tavsiye ederim. İlgili makaleme<a href="http://www.yazilimciningunlugu.com/MakaleDetay.aspx?MakaleID=7" target="_blank"> buradan </a> ulaşabilirsiniz.
Örnek senaryomuzu AdventureWork 2012 DB sindeki Person tablosunu kullanarak yapacağım. Öncelikle tablonun orjinalini bozmamak adına geçici bir tablo yaratalım:
SELECT *
INTO TempPerson
FROM Person.Person
Şimdi de mükerrer kayıt sayılarını gruplayalım bakalım:
SELECT FirstName, LastName, COUNT(1) as Adet FROM TempPerson
GROUP BY FirstName, LastName
HAVING COUNT(1)>1
Aynı ad ve soyad bilgisine sahip kişilerin dökümünü getirmiş oluyoruz bu sorguyla. Sorgu sonucu 380 satırlık bilgi dönüyor bende.
Devam edelim..
Şimdi asıl sorgumuzu yazmaya geldi sıra:
WITH Mukerrer AS
(
SELECT BusinessEntityID,
ROW_NUMBER() OVER (PARTITION BY FirstName, LastName
ORDER BY BusinessEntityID DESC) AS ID
FROM TempPerson
)
DELETE Mukerrer
WHERE ID>1
Ve bu sorguyuda çalıştırdığımızda artık tablomuzda mükerrer kayıtlar teke düşüyor.
Umarım faydalı bir yazı olmuştur.Hepinize iyi çalışmalar dilerim.