MySQL-এ ডুপ্লিকেট রো মুছে শুধু একটি অনন্য রো রাখার জন্য অস্থায়ী টেবিল (temporary table) ব্যবহার করা হয়।
পদ্ধতি
- অনন্য রোগুলো নিয়ে একটি অস্থায়ী টেবিল তৈরি করুন।
- মূল টেবিল ট্রানকেট (খালি) করুন।
- অস্থায়ী টেবিল থেকে ডেটা মূল টেবিলে কপি করুন।
- অস্থায়ী টেবিল ড্রপ করুন।
সিনট্যাক্স
CREATE TABLE tempTable AS SELECT DISTINCT col1, col2 FROM yourTable; TRUNCATE TABLE yourTable; INSERT INTO yourTable(col1, col2) SELECT col1, col2 FROM tempTable; DROP TABLE tempTable;
উদাহরণ
টেবিল তৈরি:
CREATE TABLE demo39 (
user_id INT,
user_name VARCHAR(20)
);
ডেটা ইনসার্ট (ডুপ্লিকেটসহ):
INSERT INTO demo39 VALUES (10, 'John'); INSERT INTO demo39 VALUES (10, 'John'); INSERT INTO demo39 VALUES (11, 'David'); INSERT INTO demo39 VALUES (11, 'David');
ডেটা (ডুপ্লিকেটসহ):
+---------+-----------+ | user_id | user_name | +---------+-----------+ | 10 | John | | 10 | John | | 11 | David | | 11 | David | +---------+-----------+
ডুপ্লিকেট মুছে একটি রাখার কোয়েরি
CREATE TABLE temporaryTable AS SELECT DISTINCT user_id, user_name FROM demo39; TRUNCATE TABLE demo39; INSERT INTO demo39(user_id, user_name) SELECT user_id, user_name FROM temporaryTable; DROP TABLE temporaryTable;
ফলাফল
+---------+-----------+ | user_id | user_name | +---------+-----------+ | 10 | John | | 11 | David | +---------+-----------+
বিকল্প পদ্ধতি (MySQL 8.0+): ROW_NUMBER() উইন্ডো ফাংশন ব্যবহার করে:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id, user_name ORDER BY user_id) AS rn
FROM demo39
)
DELETE FROM demo39 WHERE (user_id, user_name) IN (SELECT user_id, user_name FROM cte WHERE rn > 1);
এটি আরও দক্ষ এবং একক স্টেটমেন্টে করা যায়।