কম্পিউটার টিউটোরিয়াল

MySQL-এ SELF JOIN ব্যবহার করে ডুপ্লিকেট ভ্যালুवाले রেকর্ড বের করুন

SELF JOIN প্যাটার্ন

একই টেবিলকে দুবার জয়েন করে যে কালামের মান একাধিক সারিতে আছে সেগুলো বের করতে SELECT DISTINCT t1.* FROM table t1 JOIN table t2 ON t2.id <> t1.id AND t2.col = t1.col ব্যবহার করুন।

উদাহরণ: টেবিল ও ডেটা

mysql> CREATE TABLE DemoTable (UserId INT, UserName VARCHAR(20));
mysql> INSERT INTO DemoTable VALUES(10,'John'),(11,'Sam'),(12,'Larry'),(13,'David'),(14,'Larry');

সকল রেকর্ড (Larry ২ বার):

+--------+----------+
| UserId | UserName |
+--------+----------+
| 10     | John     |
| 11     | Sam      |
| 12     | Larry    |
| 13     | David    |
| 14     | Larry    |
+--------+----------+

ডুপ্লিকেট নামवाले সারিগুলো বের করুন

mysql> SELECT DISTINCT tbl1.* FROM DemoTable tbl1 
    JOIN DemoTable tbl2 ON tbl2.UserId <> tbl1.UserId AND tbl2.UserName = tbl1.UserName;

ফলাফল:

+--------+----------+
| UserId | UserName |
+--------+----------+
| 14     | Larry    |
| 12     | Larry    |
+--------+----------+

বিকল্প (MySQL 8.0+): SELECT * FROM DemoTable WHERE UserName IN (SELECT UserName FROM DemoTable GROUP BY UserName HAVING COUNT(*) > 1); - এটি আরও পঠনীয় এবং সাধারণত দ্রুত। DISTINCT ছাড়া ডাবল রো আসবে।

  1. MySQL-এ isMarried = 0 olan সারি গোষ্ঠী করে (GROUP BY) ক্লায়েন্ট অনুযায়ী বের করা

  2. MySQL-এ EXISTS সাবকোয়েরি ব্যবহার করে অন্য টেবিলের সাথে ম্যাচ করা রো সিলেক্ট করা

  3. MySQL-এ LIMIT ও OFFSET ব্যবহার করে ব্যাচewise রো সিলেক্ট করা

  4. MySQL-এ GROUP BY HAVING COUNT(*) ব্যবহার করে ডুপ্লিকেট মান খুঁজুন