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

MySQL-এ INNER JOIN ব্যবহার করে ডুপ্লিকেট রো ডিলিট করা

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 রোলব্যাক করা যায় (ট্রানজ্যাকশন দিয়ে)।

  1. MySQL-এ LEAST() ফাংশন ব্যবহার করে একাধিক কলাম থেকে ন্যূনতম মান বের করা

  2. MySQL-এ রেকর্ড ডিলিট করার পর কী রি-অর্ডার (Reorder) করা

  3. MySQL-এ LIMIT 1 ব্যবহার করে ডুপ্লিকেট রেকর্ড থেকে শুধু একটি ডিলিট করুন

  4. MySQL에서 데이터 삭제 후 AUTO_INCREMENT를 1부터 다시 시작하려면 TRUNCATE