Forum
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 ?
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
Cevap için teşekkür ediyorum, Söylediğiniz yolları araştırıyorum
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
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
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
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.