table - select duplicate records in mysql




MySQL এর মধ্যে একটি ছাড়া অন্য ডুপ্লিকেট সারি মুছবেন? (2)

সম্পাদক সতর্কতা: এই সমাধান কম্পিউটেশালিভাবে অক্ষম এবং একটি বড় টেবিলের জন্য আপনার সংযোগ আনতে পারে।

NB - আপনার টেবিলের একটি পরীক্ষা অনুলিপিটিতে আপনাকে প্রথমে এটি করতে হবে!

যখন আমি এটি করি, আমি খুঁজে পাই যে যদি না আমি AND n1.id <> n2.id অন্তর্ভুক্ত AND n1.id <> n2.id , এটি টেবিলের প্রতিটি সারি মুছে ফেলে।

  1. আপনি সর্বনিম্ন id মান সহ সারি রাখতে চান:

    DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
  2. আপনি সর্বোচ্চ 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 ত্রুটি পাবেন।







duplicates