সারিগুলি নির্বাচন করুন যেখানে কলামে একাধিক রেকর্ডে একই ডেটা রয়েছে


28

আমার কাছে একটি টেবিল রয়েছে যার একটি কলাম রয়েছে article_title। টেবিলের নামটি বলা যাক articles। আমার article_titleএকাধিক রেকর্ডে ডেটা একই যেখানে রেকর্ডগুলি সন্ধান করতে হবে।

আমি যা পেয়েছি তা এখানে:

select a.* 
from articles a 
where a.article_title = (select article_title 
                         from articles 
                         where article_title = a.article_title 
                         AND a.id <> articles.id)

উত্তর:


35

হ্যাভিং একটি দুর্দান্ত সামগ্রিক ফিল্টার। ( http://dev.mysql.com/doc/refman/5.6/en/group-by-extensions.html ) উদাহরণস্বরূপ, ঘটনার চেয়ে বেশি নিবন্ধের নিবন্ধটি নির্বাচন করুন:

SELECT count(*), article_title
FROM articles
GROUP BY article_title
HAVING COUNT(*) > 1;

বিভাগগুলি বাছাই করুন এবং গ্রুপের মাধ্যমে কলামগুলি যুক্ত করা আপনাকে একাধিক কলামের সংমিশ্রিত কী এর উপর ভিত্তি করে সদৃশগুলি সনাক্ত করতে দেয়।


2
@ জকুশনার: তবে মাইএসকিউএল এর বাস্তবায়নে কৌতুকগুলি (বা কিছুগুলি এটি দেখতে পাবে) থেকে সাবধান থাকুন GROUP BY: mysqlperformanceblog.com/2006/09/06/…
a_horse_with_no_name

4

আপনার প্রশ্নের এই প্রশ্নের সমাধান করা যেতে পারে:

SELECT *
FROM article
WHERE article_title IN (SELECT *
                        FROM (SELECT article_title
                              FROM article
                              GROUP BY article_title
                              HAVING COUNT(article_title) > 1)
                        AS a);

এটি সঠিক উত্তর কারণ এটি ডুপ্লিকেটগুলি থাকা সারিগুলিকে প্রকৃতপক্ষে ফেরত পাঠায়
এটাইলুজ

3

আর একটি টেবিল রয়েছে যার একটি কলাম রয়েছে আর্টিকেল_উদ্দীপক। চলুন যাক টেবিলের নামটি নিবন্ধ। আমার নিবন্ধগুলি যেখানে একাধিক রেকর্ডে নিবন্ধ_ শিরোনামের ডেটা একই থাকে তা খুঁজে বের করতে হবে।

আমার মতো মনে হচ্ছে আপনারও আইডি থাকা দরকার article_titleকারণ আপনার নকল রয়েছে তার ভিত্তিতে আপনি রেকর্ডগুলি সন্ধান করতে চান

বেসিক এমআইএন / ম্যাক্স গ্রুপের মাধ্যমে (আপনি যদি আইডিকে মিস করবেন তবে আরও 2 টি সদৃশ হবে)

SELECT 
  MIN(id) -- for FIFO id's (first id by duplicate)
, MAX(id) -- for LIFO id's (last id by duplicate)
, article_title
, COUNT(*)  
FROM
 articles
WHERE -- Maybe to filter out '' or IS NOT NULL
 article_title != '' AND article_title IS NOT NULL
GROUP BY
 article_title ASC
HAVING
 COUNT(*) >= 2
;

বা লাইফ আইডির (ডুপ্লিকেট দ্বারা পুরানো আইডি) জন্য একটি সিএসভি জেনারোরিকরণে ফিরে এসেছেন তবে আপনি সমস্ত আইডি এখানে জানেন ..

SELECT 
  GROUP_CONCAT(id ORDER BY ASC SEPARATOR ',') -- change to DESC if want the last record first
, article_title
, COUNT(*)  
FROM
 articles
GROUP BY
 article_title ASC
HAVING
 COUNT(*) >= 2
;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.