MySQL-এ একই টেবিলকে সেলফ-জয়েন (Self-Join) করে ডুপ্লিকেট রো চিহ্নিত করে ডিলিট করা যায়। শর্ত: একই কলাম মান থাকলে ছোট ID বা বড় ID রাখা।
টেবিল ও ডেটা
mysql> CREATE TABLE demo14 (
-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> name VARCHAR(30)
-> );
mysql> INSERT INTO demo14 (name) VALUES
('John'), ('David'), ('David'), ('Bob'), ('John'), ('Carol');
mysql> SELECT * FROM demo14; +----+-------+ | id | name | +----+-------+ | 1 | John | | 2 | David | | 3 | David | | 4 | Bob | | 5 | John | | 6 | Carol | +----+-------+
ডুপ্লিকেট ডিলিট (ছোট ID রাখে, বড় ID ডিলিট)
mysql> DELETE tbl1 FROM demo14 tbl1
-> INNER JOIN demo14 tbl2
-> WHERE tbl1.id < tbl2.id AND tbl1.name = tbl2.name;
Query OK, 2 rows affected (0.20 sec)
ফলাফল (বড় ID গুলো বacés)
mysql> SELECT * FROM demo14; +----+-------+ | id | name | +----+-------+ | 3 | David | | 4 | Bob | | 5 | John | | 6 | Carol | +----+-------+
ব্যাখ্যা: tbl1.id < tbl2.id মানে tbl1 ছোট ID, tbl2 বড় ID। একই নাম পেলে ছোট ID (tbl1) ডিলিট হয়। ফলাফলে বড় ID গুলো বাঁচে। tbl1.id > tbl2.id করলে ছোট ID বাঁচবে।
সতর্কতা: প্রোডাকশনে ব্যাকআপ নিয়ে করুন। DELETE রোলব্যাক করা যায় (ট্রানজ্যাকশন দিয়ে)।