MSSQL ile Yinelenen Kayıtlar nasıl bulunur?

Veritabanı üzerinde kontrol sorguları yapılırken MÜKERRER (Yinelenen) kayıtları bulmak için en basitinden aşağıdaki sorgu yapısını kullanabiliriz.

[box type=”shadow”]

SELECT * FROM (
SELECT     row_number() over (partition by kurum.kurumno order by kurum.kurumno) as rowid,
uyeligi.kurumno,
kurum.unvani,
kurum.sicilno
FROM
uyeligi,kurum

where uyeligi.kurumno=kurum.kurumno

) AS sonuclar
WHERE sonuclar.rowid >1

[/box]

 

sorgumuzu en kısa şekilde anlatmak gerekirse;

SELECT * FROM (
SELECT     row_number() over (partition by kurum.kurumno order by kurum.kurumno) as rowid, …

burada asıl önemli olan SELECT     row_number() over (partition by kurum.kurumno order by kurum.kurumno) as rowid, komutudur. BU komut ile kurum.kurumno sütununu ORDER BY ile ARTAN düzende sıralı ve PARTITION by komutu ile de listeyi kendi içersinde gruplandırırken. Row_number() ile de kendi içersinde gruplandırılan satırlara artan sırada 1,2,3 gibi numara vermiş oluyoruz.

ile  parantez içindeki sorguyu  bir diziye alıyoruz ve bu dizi içersindeki herşeyi SELECT * FROM ( ile getir diyoruz.

Daha sonra da;

) AS sonuclar WHERE sonuclar.rowid >1 ile dizinin rowid sütunundaki sayının 1 den büyük olduğu durumları göster diyoruz. Bu şekildede tekrar sayısı 1 den büyük olanlar listeleniyor.