Forum

MS SQL Server' da V...
 
Bildirimler
Hepsini Temizle

MS SQL Server' da Veri Tekrarını Önleme ?

6 Yazılar
1 Üyeler
0 Reactions
3,923 Görüntüleme
(@mehmetugur)
Gönderiler: 277
Reputable Member
Konu başlatıcı
 

Merhaba Left join yazdığım SQL kodunu çalıştırdığımda bazı veriler veritabanında tek kayıt olduğu halde aynı veriyi birden fazla listeliyor. Sizce tek kayıt olup birden fazla göstermesini nasıl önleyebilirim ?

İlgi Resim:

SQL Sorgusu:

SELECT distinct TCNo,Adi,Soyadi,CepNo1,CepNo2,BabaAdi,EvTelNo,DukkanTelNo,EvAdresi,DogumTarihi,Eposta,DukkanAdresi,MCB.Markasi,

MCB.SeriNosu,MCB.CihazSatisTarihi,MCB.GarantiBitisTarihi,MB.MusteriID FROM Musteri_KimlikBilgileri as MB  

left join Musteri_CihazVeServisBilgileri as MCB on MCB.MusteriID = MB.MusteriID  

 
Gönderildi : 21/02/2015 23:58

(@mehmetugur)
Gönderiler: 277
Reputable Member
Konu başlatıcı
 

Cevap için teşekkür ediyorum, Söylediğiniz yolları araştırıyorum

 
Gönderildi : 22/02/2015 00:33

(@mehmetugur)
Gönderiler: 277
Reputable Member
Konu başlatıcı
 

Merhaba

En basit yol markasi ve serinosu alanlarını sorgudan çıkarınca düzeliyor 🙂

Kesin net bir yöntem yok bu konuda, veri yapınıza uygun olarak farklı yollar denenebilir.

Group by deneyebilirsiniz. Veya row_number () over koşulu da uygulanabilir.

Outer apply i araştırabilirsiniz.

LEFT JOIN ____ ON (eşleşen_alanlar) dan sonra AND yazılarak farklı şartlar yazılabilir.

 

 

malesef yapamadım row number metodunu denedim fakat mantığını kuramadım yine kayıtlar çift geliiyor.

 

şuan bu resme göre sizce ne yapabilirim  

 
Gönderildi : 22/02/2015 15:11

(@mehmetugur)
Gönderiler: 277
Reputable Member
Konu başlatıcı
 

Bahsettiğim diğer yöntemleri denediniz mi? Ayrıca bağlanan tabloda left join kullanmanız zorunlu mu? Inner join ile deneyebildiniz mi?

 Dediğiniz yöntemi araştırdım o şekilde tek kayıt listeletmesini sağladım fakat yeni kayıt basıp VeriListele() yani bu sql kodumun çalıştığı yer tekrar devreye girdiğinde veri yine ikileyerek geliyor. 

select t1.TCNo,t1.Adi,t1.Soyadi,t1.CepNo1,t1.CepNo2,t1.EvTelNo,t1.DukkanTelNo,t1.EvAdresi,t1.DukkanAdresi,t2.Markasi,t2.SeriNosu,t2.CihazSatisTarihi,t2.GarantiBitisTarihi,t1.MusteriID from Musteri_KimlikBilgileri as t1 cross apply (select top 1 t.MusteriID,t.Markasi,t.SeriNosu,t.GarantiBitisTarihi,t.CihazSatisTarihi, ROW_NUMBER() over(PARTITION by t1.MusteriID order by t.MusteriID) as nmb from Musteri_CihazVeServisBilgileri as t where t.MusteriID = t1.MusteriID) as t2

İnner join ile de denedim aynısı sorun devam ediyor malesef

 
Gönderildi : 25/02/2015 00:47

(@mehmetugur)
Gönderiler: 277
Reputable Member
Konu başlatıcı
 

Mehmet bey

Şimdi veri tekrarı dediğimiz olay yok aslında, birleştirilen tablolardaki, farklı alanlarda farklı veriler olduğu zaman, o satır mutlaka sorguya gelir, o satırlar birleşmez, çünkü alanlarda farklı veriler vardır. Bu yüzden çok uğraşıyorsunuz, farklı veriler olduğu için birleşim olmuyor.  

 

Hocam sorunu çözdüm. Benim gibi kişilere de faydalı olması açısından yazmak istedim. Benim yapmak istediğim müşteri id sine göre gruplayıp ilgili müşterinin MüşteriCihazID sinin maksimum değerini almaktı. SQL Kodları:

Select m.*, c.Markasi,c.SeriNosu,c.CihazSatisTarihi,c.GarantiBitisTarihi from Musteri_CihazVeServisBilgileri c
Left Outer Join Musteri_KimlikBilgileri m ON c.MusteriID = m.MusteriID Where MusteriCihazBilgileriID in
(Select MAX(MusteriCihazBilgileriID) From Musteri_CihazVeServisBilgileri Group By MusteriID ) order by m.MusteriID desc 

 
Gönderildi : 26/02/2015 23:53

(@mehmetugur)
Gönderiler: 277
Reputable Member
Konu başlatıcı
 

Geri dönüş için teşekkürler Mehmet bey

 

Çözümü biraz geç bulduğum için paylaşımında biraz geç oldu ama yinede paylaşayım dedim.

 
Gönderildi : 27/02/2015 19:52

Paylaş: