उन पंक्तियों को खोजें, जिनका MySQL में एक कॉलम पर समान मूल्य है


209

[सदस्य] तालिका में, कुछ पंक्तियों का emailस्तंभ के लिए समान मूल्य है ।

login_id | email
---------|---------------------
john     | john123@hotmail.com
peter    | peter456@gmail.com
johnny   | john123@hotmail.com
...

कुछ लोगों ने एक अलग लॉगिन_आईडी का उपयोग किया था लेकिन एक ही ईमेल पता, इस स्तंभ पर कोई अद्वितीय बाधा निर्धारित नहीं की गई थी। अब मुझे इन पंक्तियों को खोजने और यह देखने की आवश्यकता है कि क्या उन्हें हटा दिया जाना चाहिए।

इन पंक्तियों को खोजने के लिए मुझे किस एसक्यूएल स्टेटमेंट का उपयोग करना चाहिए? (MySQL 5)

जवाबों:


341

यह क्वेरी आपको सबसे पहले उपयोग किए गए पतों के साथ ईमेल पतों की सूची और कितनी बार उपयोग किया जाता है।

SELECT email,
       count(*) AS c
FROM TABLE
GROUP BY email
HAVING c > 1
ORDER BY c DESC

यदि आप पूरी पंक्तियाँ चाहते हैं:

select * from table where email in (
    select email from table
    group by email having count(*) > 1
)

1
count(1)समान रूप से अच्छी तरह से काम करता है, और अधिक प्रदर्शन करने वाला है। ( स्टैक ओवरफ्लो से सीखी ट्रिक ;-)
jpaugh


वास्तव में अनंत पुनरावृत्ति या mysql पर कुछ भी बनाया "बहुत अधिक कनेक्शन" के कारण एक मृत डेटाबेस के परिणामस्वरूप: - /
huygir


13

यहाँ क्वेरी को खोजने emailके लिए उपयोग किया जाता है जो एक से अधिक के लिए उपयोग किया जाता है login_id:

SELECT email
FROM table
GROUP BY email
HAVING count(*) > 1

आप की सूची प्राप्त करने क्वेरी (नेस्टेड का) दूसरे की आवश्यकता होगी login_idद्वारा email


10

स्वीकृत उत्तर का पहला भाग MSSQL के लिए काम नहीं करता है।
यह मेरे लिए काम किया:

select email, COUNT(*) as C from table 
group by email having COUNT(*) >1 order by C desc

5

यदि आपके ईमेल कॉलम में रिक्त मान हैं, तो इसका उपयोग करें

 select * from table where email in (
    select email from table group by email having count(*) > 1 and email != ''
    )

3

मुझे पता है कि यह एक बहुत पुराना सवाल है, लेकिन यह किसी और के लिए अधिक है, जो एक ही समस्या हो सकती है और मुझे लगता है कि यह वही था जो सटीक था।

SELECT * FROM member WHERE email = (Select email From member Where login_id = john123@hotmail.com) 

यह उन सभी रिकॉर्डों को लौटाएगा जिनमें john123@hotmail.com एक login_id मान के रूप में है।


2

धन्यवाद दोस्तों :-) मैंने नीचे का इस्तेमाल किया क्योंकि मैंने केवल उन दो कॉलमों की परवाह की है और बाकी के बारे में इतना नहीं। बढ़िया काम किया

  select email, login_id from table
    group by email, login_id
    having COUNT(email) > 1

2
प्रश्न में मामले में, COUNT (ईमेल) हमेशा 1 होगी, इसलिए आप क्वेरी कुछ भी नहीं लौटाएंगे।
जटकी

नहीं, क्वेरी ने वास्तव में मुझे आवश्यक डेटा दिया, जो कि अलग-अलग ईमेल और लॉगिन_नाम है जिनके पास एक ही ईमेल है
Libertine

यदि आप ईमेल और login_id द्वारा समूह बनाते हैं, तो आप एक ही ईमेल और लॉगिन के लिए पंक्तियों की मात्रा की गणना करेंगे, और जो आपके उदाहरण में भिन्न हैं, इसलिए गणना हमेशा 1 होगी। यहां आपकी क्वेरी के साथ फ़िडल है
jutky

1

पूरे रिकॉर्ड को प्राप्त करें जैसे आप आंतरिक चयन क्वेरी के साथ स्थिति का उपयोग करना चाहते हैं।

SELECT *
FROM   member
WHERE  email IN (SELECT email
                 FROM   member
                 WHERE  login_id = abcd.user@hotmail.com) 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.