MySQL – Find and modify duplicate records

First we need to find the existing orders data which are having duplicate values on column “reference_number”

/* select order which have duplicate reference_number */
SELECT entity_id, reference_number FROM sales_order WHERE reference_number IN (SELECT reference_number FROM sales_order GROUP BY reference_number HAVING count(*) > 1);


/* select max(entity_id) of those duplicate orders with same reference_number */
SELECT * FROM
(
SELECT max(entity_id)
FROM sales_order
WHERE reference_number IS NOT NULL
GROUP BY reference_number HAVING count(*) > 1
) tmp;

/* update those those duplicate orders with same reference_number = reference_number-1 */
UPDATE sales_order
/*SET reference_number = NULL */
SET reference_number=CONCAT(reference_number,'-1')
WHERE entity_id IN
(
SELECT * FROM
(
SELECT max(entity_id)
FROM sales_order
WHERE reference_number IS NOT NULL
GROUP BY reference_number HAVING count(*) > 1
) tmp
);

This way you would be able to update all those duplicate orders with reference_number = reference_number-1
ie reference_number = ORD-1234 will be updated with reference_number = ORD-1234-1

By Vaseem Ansari

I’m Vaseem, a Software Engineer by Profession, a Traveler, a Foodie by Heart and the founder of VaseemAnsari.com. I started traveling from college days and it has become a part of me now. So when ever I happen to get a chance I pack my bag and am on the roads. You can follow me on these social networks Facebook, Twitter, Google+ and Linkedin.

Leave a comment

Your email address will not be published. Required fields are marked *