DROP TEMPORARY TABLE IF EXISTS tmp.priority;
CREATE TEMPORARY TABLE tmp.priority
	ENGINE = MEMORY
	SELECT itemTagId, MaxPriority
		FROM (SELECT it.id itemTagId, priorityChange.MaxPriority, i.id
					FROM vn.itemTag it
						JOIN vn.item i ON i.id = it.itemFk
						JOIN vn.itemType ity ON ity.id = i.typeFk
						JOIN (SELECT it.itemFk, max(it.priority) + 1 as MaxPriority
								FROM vn.itemTag it 	
								GROUP BY it.`itemFk`
							) priorityChange ON priorityChange.itemFk = i.id
						JOIN(SELECT it.itemFk,it.priority, min(it.id) as minId
								FROM vn.itemTag it 	
								GROUP BY it.`itemFk`,it.`priority`
							) minId ON minId.itemFk = i.id 
									AND minId.priority = it.priority
					WHERE i.isActive
					GROUP BY it.itemFk, it.priority
					HAVING COUNT(it.priority) > 1)sub
		GROUP BY sub.id;

SET @isTriggerDisabled := TRUE;
	UPDATE vn.itemTag it
		JOIN tmp.priority tmp ON tmp.itemTagId = it.id
	SET it.priority = tmp.MaxPriority;
SET @isTriggerDisabled := FALSE;

DROP TEMPORARY TABLE IF EXISTS tmp.priority;

ALTER TABLE `vn`.`itemTag` 
ADD UNIQUE INDEX `itemTagItemPriority` (`itemFk` ASC, `priority` ASC);
