23 lines
939 B
SQL
23 lines
939 B
SQL
-- Prevent duplicate FIXED details within one version (same product_country snapshot row)
|
|
-- MySQL allows multiple NULLs in UNIQUE, so DISCOUNT rows (product_country_id null) are OK.
|
|
SET NAMES utf8mb4;
|
|
SET @db := DATABASE();
|
|
|
|
-- Clean exact duplicates before adding unique key (keep min psd_id)
|
|
DELETE d1 FROM prc_price_set_detail d1
|
|
INNER JOIN prc_price_set_detail d2
|
|
ON d1.psv_id = d2.psv_id
|
|
AND d1.product_country_id = d2.product_country_id
|
|
AND d1.psd_id > d2.psd_id
|
|
WHERE d1.psv_id IS NOT NULL
|
|
AND d1.product_country_id IS NOT NULL;
|
|
|
|
SET @has := (
|
|
SELECT COUNT(*) FROM information_schema.STATISTICS
|
|
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_price_set_detail' AND INDEX_NAME = 'uk_psd_psv_product_country'
|
|
);
|
|
SET @sql := IF(@has = 0,
|
|
'ALTER TABLE prc_price_set_detail ADD UNIQUE KEY uk_psd_psv_product_country (psv_id, product_country_id)',
|
|
'SELECT 1');
|
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|