table - select duplicate records in mysql
MySQL এর মধ্যে একটি ছাড়া অন্য ডুপ্লিকেট সারি মুছবেন? (2)
সম্পাদক সতর্কতা: এই সমাধান কম্পিউটেশালিভাবে অক্ষম এবং একটি বড় টেবিলের জন্য আপনার সংযোগ আনতে পারে।
NB - আপনার টেবিলের একটি পরীক্ষা অনুলিপিটিতে আপনাকে প্রথমে এটি করতে হবে!
যখন আমি এটি করি, আমি খুঁজে পাই যে যদি না আমি AND n1.id <> n2.id
অন্তর্ভুক্ত AND n1.id <> n2.id
, এটি টেবিলের প্রতিটি সারি মুছে ফেলে।
আপনি সর্বনিম্ন
id
মান সহ সারি রাখতে চান:DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
আপনি সর্বোচ্চ
id
মান সহ সারি রাখতে চান:DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
আমি MySQL 5.1 এ এই পদ্ধতি ব্যবহার করেছি
অন্যান্য সংস্করণ সম্পর্কে নিশ্চিত না।
হালনাগাদ করুন: যেহেতু লোকেরা এখানে ডুপ্লিকেটগুলি সরানোর জন্য Googling শেষ করে
যদিও OP এর প্রশ্নটি DELETE
সম্পর্কে, তবে পরামর্শ করুন যে INSERT
এবং DISTINCT
ব্যবহার করে আরও দ্রুত। 8 মিলিয়ন সারি সহ একটি ডাটাবেসের জন্য নিচের ক্যোয়ারিতে 13 মিনিট সময় লেগেছে, যখন DELETE
ব্যবহার করে, এটি 2 ঘণ্টারও বেশি সময় নেয় এবং এখনো শেষ হয়নি।
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;
সম্ভাব্য ডুপ্লিকেট:
MySQL মধ্যে ডুপ্লিকেট সারি সরান
কিভাবে আমি একটি MySQL টেবিল থেকে সব নকল তথ্য মুছে ফেলবো?
উদাহরণস্বরূপ, নিম্নলিখিত তথ্য দিয়ে:
SELECT * FROM names;
+----+--------+
| id | name |
+----+--------+
| 1 | google |
| 2 | yahoo |
| 3 | msn |
| 4 | google |
| 5 | google |
| 6 | yahoo |
+----+--------+
আমি SELECT DISTINCT name FROM names;
ব্যবহার করবে SELECT DISTINCT name FROM names;
যদি এটি একটি SELECT
প্রশ্নের ছিল।
আমি কেবলমাত্র ডুপ্লেটগুলি সরাতে এবং প্রতিটির এক রেকর্ড রাখতে DELETE
কীভাবে এটি করব?
আপনি সর্বনিম্ন id
মান সহ সারি রাখতে চান:
DELETE FROM NAMES
WHERE id NOT IN (SELECT *
FROM (SELECT MIN(n.id)
FROM NAMES n
GROUP BY n.name) x)
যদি আপনি সর্বোচ্চ মানের id
মান চান তবে:
DELETE FROM NAMES
WHERE id NOT IN (SELECT *
FROM (SELECT MAX(n.id)
FROM NAMES n
GROUP BY n.name) x)
একটি subquery subquery মাইএসকিউএল জন্য প্রয়োজন, অথবা আপনি একটি 1093 ত্রুটি পাবেন।