USE vn;

ALTER TABLE vn.sectorCollectionSaleGroup DROP FOREIGN KEY IF EXISTS sectorCollectionSaleGroup_FK_1;
ALTER TABLE vn.sectorCollectionSaleGroup DROP FOREIGN KEY IF EXISTS sectorCollectionSaleGroup_FK;

ALTER TABLE vn.sectorCollectionSaleGroup DROP KEY IF EXISTS sectorCollectionSaleGroup_UN;
DELETE 
	FROM sectorCollectionSaleGroup 
	WHERE id NOT IN (
		SELECT * 
			FROM (
				SELECT MIN(id) 
					FROM sectorCollectionSaleGroup 
					GROUP BY saleGroupFk
			) as temp_table
	);
ALTER TABLE vn.sectorCollectionSaleGroup ADD CONSTRAINT UNIQUE KEY (saleGroupFk);

ALTER TABLE vn.sectorCollectionSaleGroup ADD CONSTRAINT FOREIGN KEY (sectorCollectionFk) REFERENCES vn.sectorCollection(id) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE vn.sectorCollectionSaleGroup ADD CONSTRAINT FOREIGN KEY (saleGroupFk) REFERENCES vn.saleGroup(id) ON DELETE CASCADE ON UPDATE CASCADE;

CREATE OR REPLACE TEMPORARY TABLE tSGD
SELECT saleFk, sgd.id, count(*) n
    FROM vn.saleGroupDetail sgd 
    GROUP BY saleFk 
    HAVING n > 1;

DELETE sgd.*
    FROM vn.saleGroupDetail sgd
        JOIN tSGD ON tSGD.saleFk = sgd.saleFk AND tSGD.id <> sgd.id;

DROP TEMPORARY TABLE tSGD;

ALTER TABLE vn.sectorCollectionSaleGroup ADD CONSTRAINT FOREIGN KEY (saleGroupFk) REFERENCES vn.saleGroup(id) ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE vn.saleGroupDetail DROP FOREIGN KEY IF EXISTS saleGroupDetail_FK;
ALTER TABLE vn.saleGroupDetail DROP FOREIGN KEY IF EXISTS saleGroupDetail_FK_1;
ALTER TABLE vn.saleGroupDetail DROP KEY IF EXISTS saleGroupDetail_UN;
ALTER TABLE vn.saleGroupDetail ADD CONSTRAINT FOREIGN KEY (saleFk) REFERENCES vn.sale(id) ON DELETE CASCADE ON UPDATE CASCADE;