SELF JOIN সহ DELETE ব্যবহার করুন
ডুপ্লিকেট রেকর্ডগুলো মুছে শুধু একটি রেখে রাখতে DELETE t1 FROM table t1 JOIN table t2 ON t1.dup_col = t2.dup_col AND t1.id > t2.id প্যাটার্ন ব্যবহার করুন।
উদাহরণ: টেবিল ও ডুপ্লিকেট ডেটা
mysql> CREATE TABLE DemoTable (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(40)
);
mysql> INSERT INTO DemoTable(StudentName) VALUES('John'),('Carol'),('Sam'),('Carol'),('David'),('Carol');
ডুপ্লিকেট সহ (Carol ৩ বার):
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | John | | 2 | Carol | | 3 | Sam | | 4 | Carol | | 5 | David | | 6 | Carol | +-----------+-------------+
ডুপ্লিকেট মুছে একটি রাখুন
mysql> DELETE tbl1 FROM DemoTable tbl1, DemoTable tbl2
WHERE tbl1.StudentName = tbl2.StudentName AND tbl1.StudentId > tbl2.StudentId;
Query OK, 2 rows affected (0.79 sec)
ফলাফল (Carol-এর প্রথম রেকর্ড রক্ষা):
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | John | | 2 | Carol | | 3 | Sam | | 5 | David | +-----------+-------------+
বিকল্প (MySQL 8.0+): WITH cte AS (SELECT StudentId, ROW_NUMBER() OVER (PARTITION BY StudentName ORDER BY StudentId) AS rn FROM DemoTable) DELETE FROM DemoTable WHERE StudentId IN (SELECT StudentId FROM cte WHERE rn > 1);। এটি আরও পঠনীয় এবং পারফরম্যান্স ভালো।