মাইএসকিউএলে একটি কলামে একই মান রয়েছে এমন সারিগুলি সন্ধান করুন


209

একটি [সদস্য] সারণীতে, কিছু সারি emailকলামের জন্য একই মান রাখে ।

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

কিছু লোক একটি ভিন্ন লগইন_আইডি ব্যবহার করেছেন তবে একই ইমেল ঠিকানা, এই কলামে কোনও অনন্য বাধা সেট করা হয়নি। এখন আমাকে এই সারিগুলি সন্ধান করতে হবে এবং সেগুলি সরিয়ে ফেলা উচিত কিনা তা দেখতে হবে।

এই সারিগুলি খুঁজতে আমার কী এসকিউএল বিবৃতি ব্যবহার করা উচিত? (মাইএসকিউএল 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

3
@jpaugh, ব্যবহার না করার চাইতে পারেন count(1) stackoverflow.com/questions/2710621/...
ঝড়

মূলত অসীম পুনরাবৃত্তি বা
মাইএসকিএল-


13

emailএর জন্য আরও ব্যবহৃত হয় যাগুলি অনুসন্ধান করতে এখানে জিজ্ঞাসা করা হল login_id:

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

এর login_idদ্বারা তালিকা পেতে আপনার দ্বিতীয় (নেস্টেড) কোয়েরি দরকার হবে email


10

গৃহীত উত্তরের প্রথম অংশ এমএসএসকিউএল-র জন্য কাজ করে না।
এটি আমার পক্ষে কাজ করেছে:

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 থাকা সমস্ত রেকর্ডকে লগইন_আইডি মান হিসাবে ফিরিয়ে দেবে।


2

ধন্যবাদ বলছি :-) আমি নীচেরটি ব্যবহার করেছি কারণ আমি কেবলমাত্র দুটি কলামের যত্ন নিয়েছি এবং বাকিগুলি সম্পর্কে তেমন কিছু না। দুর্দান্ত কাজ করেছেন

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

2
প্রশ্নযুক্ত ক্ষেত্রে, COUNT (ইমেল) সর্বদা 1 হবে, সুতরাং আপনার ক্যোয়ারী কিছুই ফিরিয়ে দেবে না।
ঝাঁকুনি

না, ক্যোয়ারীটি আসলে আমাকে আমার প্রয়োজনীয় ডেটা দিয়েছে যা স্পষ্টভাবে একই ইমেলযুক্তদের ইমেল এবং লগইন_নাম
লিবার্টাইন

আপনি যদি ইমেল এবং লগইন_আইডি দ্বারা গোষ্ঠী করেন , আপনি একই ইমেল এবং লগইনের জন্য সারিগুলির পরিমাণ গণনা করবেন এবং এটি আপনার উদাহরণে স্বতন্ত্র, সুতরাং গণনাটি সর্বদা 1 হবে your এখানে আপনার ক্যোয়ারীর সাথে ফিডল রয়েছে যা 0 টি সারি ফেরত দেয়: স্ক্যালফিল্ডল। com / #! 9 / 4bbcaf / 3
জটকি

1

অভ্যন্তরীণ নির্বাচনের প্রশ্নের সাথে শর্তটি ব্যবহার করতে চাইলে পুরো রেকর্ডটি পান।

SELECT *
FROM   member
WHERE  email IN (SELECT email
                 FROM   member
                 WHERE  login_id = abcd.user@hotmail.com) 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.