मैं उन सभी पंक्तियों को हटाना चाहता हूं जिनमें डुप्लिकेट प्रविष्टियां हैं और मैं प्रत्येक में से एक को नहीं रखना चाहता हूं। मैं डुप्लिकेट प्रविष्टियों वाली सभी प्रविष्टियों को हटाना चाहता हूं। यहां मैंने कुछ कोड का उल्लेख किया है जो उच्चतम या निम्नतम आईडी मान रखेगा। यहां सभी प्रश्न डुप्लिकेट रिकॉर्ड से एकल प्रविष्टि रहेंगे

Mysql जिस प्रश्न का मैंने प्रयास किया वह है

DELETE * ,count(*)as n FROM cart by rfid HAVING n>1

डीबी डिजाइन:

ID(PK)|RFID    |CATAGORY                                                       
1     |1       |5                                                                                           
2     | 1      | 5                                                                                        
3     | 2      | 4                                                                                       
4     |3       | 6                                                                                                           

आउटपुट:

ID(PK)|RFID|CATAGORY                                                                       
2     | 1      | 5                                                                                        
3     | 2      | 4                                                                                       
4     |3       | 6                                                                                                           

अपेक्षित परिणाम:

ID(PK)|RFID|CATAGORY                                                               
 3     | 2      | 4                                                                                        
 4     |3       | 6                                                                                                                                                                                                                                                                                       
0
Akhila Bhaskar 2 मई 2018, 12:34

2 जवाब

सबसे बढ़िया उत्तर

अलग और सबसे पुरानी प्रविष्टियों का चयन करें (नोट: MIN() का उपयोग करके और मान लें कि id ऑटोइनक्रिकमेंट मोड और PK है), इसके बजाय नवीनतम को संरक्षित करने के लिए बस MAX() पर स्विच करें।

SELECT MIN(id) FROM cart group by rfid;

सभी एक साथ (वह सब हटाना जहां पिछले चयन में नहीं है

DELETE FROM cart where id NOT in (SELECT MIN(id) FROM cart group by rfid);

उपर्युक्त काम नहीं करेगा क्योंकि आप खंड से अद्यतन के लिए लक्ष्य तालिका निर्दिष्ट नहीं कर सकते हैं (इस मामले में हटाएं), लेकिन आप उप-चयन द्वारा चारों ओर धोखा दे सकते हैं, इसलिए अंतिम कार्य क्वेरी होगी:

DELETE FROM cart WHERE id NOT IN (SELECT MIN(A.id) FROM (SELECT * FROM cart) A group by A.rfid);

संपादित करें (उन सभी प्रविष्टियों को निकालने के लिए जिनकी गणना है>1 )

DELETE FROM cart WHERE id  IN( 
  SELECT A.id FROM (SELECT * FROM cart) A where A.rfid IN 
  (SELECT B.rfid from  (SELECT * FROM cart) B group by B.rfid having count(B.rfid)>1)
);
0
koalaok 2 मई 2018, 18:25
DELETE cart.* FROM cart INNER JOIN (SELECT rfid,catagory FROM cart GROUP BY rfid,catagory HAVING COUNT(*)>1) dup ON cart.rfid = dup.rfid AND cart.`catagory` = dup.`catagory`                                                                                                                     

इस प्रश्न ने मेरी समस्या हल कर दी। धन्यवाद

0
Lelio Faieta 2 मई 2018, 18:29