ठीक है, तो यहाँ मैं क्या सलाह दूंगा। आप केवल डुप्लीकेट निर्दिष्ट करने के लिए अपना जहां क्लॉज बदलना चाहते हैं। साथ ही, आप वास्तव में केवल सक्रिय रिकॉर्ड देखना चाहते हैं क्योंकि निष्क्रिय रिकॉर्ड के डुप्लीकेट होने से कोई फर्क नहीं पड़ता।
यह देखने के लिए कि क्या कोई डुप्लीकेट है, आप exists
. का उपयोग कर सकते हैं . अस्तित्व का उपयोग करने के लिए, पहले हम डुप्लिकेट रिकॉर्ड वापस खींचने के लिए एक सबक्वायरी लिखने जा रहे हैं, उर्फ कुछ भी पहले और अंतिम नाम के साथ, एक अलग आईडी, और यह भी सक्रिय है। अगर सबक्वेरी कुछ वापस खींचती है, तो मौजूद है सच हो जाएगा और हम रिकॉर्ड अपडेट करेंगे। यदि कोई डुप्लीकेट नहीं हैं, तो सबक्वायरी कोई रिकॉर्ड नहीं लेगी और मौजूद झूठी वापस आ जाएगी। फिर, हम रिकॉर्ड को अपडेट नहीं करेंगे।
update u
set active = 0
From UserInfo u
where (SELECT count(*)
FROM UserRecords recs
where recs.UserId= u.UserId) = 0
and u.active = 1
and exists (Select 1
From UserInfo u2
Where u2.lastname = u.lastname
and u2.firstname = u.firstname
and u2.userid <> u.userid
and u2.active = 1)