2013-02-26 21 views
5

मेरे पास सदस्य आईडी द्वारा जुड़े दो टेबल, सदस्य और दान हैं। सदस्यों के पास कई डुप्लिकेट हैं। मैं उन्हें हटाना चाहता हूं, लेकिन इससे पहले कि, मैं दान में एक सदस्य की प्रविष्टियों को एक आईडी में अपडेट करना चाहता हूं - शायद सारा टैम के मामले में MAX मान (456)।एसक्यूएल - एकाधिक पंक्तियों का चयन कैसे करें

वहाँ और सारा के सदस्य के सभी (जो दूसरों दान में प्रविष्टियों है, लेकिन नहीं फ्रेड कौन नहीं करता? मैं आईडी 123 कैसे संबद्ध कर सकते हैं और 456?

members   donations 
    -----------  ----------- 
    123 Sara Tam  123 20.00 
    456 Sara Tam  123 40.00 
    789 Sara Tam  333 10.00 
    .     444 30.00 
    .     999 30.00 
    789 Fred Foo 
+0

अपनी मेज संरचनाओं पोस्ट करें। इसके अलावा, सारा की अधिकतम आईडी 78 9 है, है ना? – sgeddes

+0

सारा फ्रेड के साथ अपने सदस्य आईडी (78 9) में से एक साझा करती है? – supergrady

+0

फ्रेड की आईडी कुछ और होनी चाहिए। टाइपो के लिए क्षमा करें। – hadenp

उत्तर

3

मैं आपके सवालों का सही ढंग से समझ रहा हूँ, तो आप एक सदस्य के साथ जुड़े मैक्स क्रमांक करने के लिए अपने दान तालिका अद्यतन करने के लिए चाहते हैं, और MAX तालिका रखने वाले सदस्य तालिका में डुप्लिकेट रिकॉर्ड हटाएं।

यदि हां, तो यह काम करना चाहिए - हालांकि, आप 2 सदस्य एक ही आईडी वाले नहीं करना चाहिए था:

UPDATE Donations D 
    JOIN Members M ON M.MemberId = D.MemberId 
    JOIN (SELECT Max(MemberId) MaxId, Name 
     FROM Members 
     GROUP BY Name 
    ) M2 ON M.Name = M2.Name 
SET D.MemberId = M2.MaxId; 

DELETE M 
FROM Members M 
    JOIN Members M2 ON M.Name = M2.Name AND M.MemberId < M2.MemberId; 

SQL Fiddle Demo

अपनी टिप्पणी दें, शायद आप केवल देख रहे MAX (आईडी) के साथ अद्यतन दान दिखाने के लिए SQL कथन। यदि ऐसा है तो यह काम करना चाहिए:

SELECT M2.MaxId MemberId, D.Amount 
FROM Donations D 
    JOIN Members M ON M.MemberId = D.MemberId 
    JOIN (SELECT Max(MemberId) MaxId, Name 
     FROM Members 
     GROUP BY Name 
    ) M2 ON M.Name = M2.Name; 

और updated fiddle

+0

फ्रेड की आईडी कुछ और होना चाहिए ... क्षमा करें। क्या आप इसे पुन: स्थापित करने में सक्षम होंगे ताकि क्वेरी केवल दानों में रिकॉर्ड का चयन करे जो वह सदस्य की अधिकतम आईडी के साथ अपडेट हो रही है? – hadenp

+0

@ हडेनप - मैंने अपना जवाब संपादित कर लिया है। शुभकामनाएँ! – sgeddes

+0

धन्यवाद sgeddes - मैं वास्तव में अद्यतन करने से पहले, मैं निम्नलिखित जानना चाहता हूं: सभी दान आईडी के लिए, क्या सदस्यों में कई आईडी हैं? इससे पहले कि मैं 78 9 में दान में सारा के आईडी अपडेट कर सकूं, मुझे सदस्यों में अपनी सभी आईडी जाननी चाहिए, फिर दान में अपने रिकॉर्ड अपडेट करने के लिए अधिकतम का उपयोग करें। – hadenp

0

चयन करने के लिए SELECT MEMBERS.* FROM MEMBERS, DONATIONS WHERE DONATIONS.ID != MEMBERS.ID प्रयास करें कहीं भी होगी एक प्रश्न है आपको उन सभी सदस्यों को पंक्तियां दें जिनके पास दान नहीं है। मेरा वाक्यविन्यास थोड़ा सा हो सकता है, लेकिन अधिक जानकारी के लिए informIT से इस टुकड़े की तरह शामिल होने के बारे में दस्तावेज देखें।

+0

वह उन सभी सदस्यों को चाहता है जो दान में _are_, साथ ही साथ उनके सभी अन्य आईडी भी चाहते हैं। – Barmar

0

यह मिलेगा सभी अतिरिक्त डुप्लिकेट आईडी के लिए अधिकतम सदस्य आईडी:

select m1.member_id, max(m2.member_id) maxid 
from members m1 
join members m2 on m1.name = m2.name and m1.member_id < m2.member_id 

यह करने के लिए अभी जो दान में हैं उन प्रतिबंधित करने के लिए:

select m1.member_id, max(m2.member_id) maxid, count(*) duplicates 
from members m1 
join (select distinct member_id from donations) d on m1.member_id = d.member_id 
join members m2 on m1.name = m2.name and m1.member_id < m2.member_id 
having duplicates > 1 
+0

हाय बाड़ार। मेरे सदस्यों में डुप्लीकेट हैं और कुछ दान एक अलग सदस्य की आईडी के तहत किए जा सकते थे जो वास्तव में सदस्यों में एक व्यक्ति से संबंधित है। मैं क्या जानना चाहता हूं कि यदि कोई दान रिकॉर्ड मौजूद है जो सदस्यों में 1 से अधिक रिकॉर्ड इंगित करता है। – hadenp

+0

अद्यतन क्वेरी देखें जो डुप्लिकेट की गणना करता है। – Barmar

संबंधित मुद्दे