要删除重复项,您可以使用
DELETE FROM your_table t1
LEFT JOIN
(
SELECT MIN(id) AS id
FROM your_table
GROUP BY SUBSTRING_INDEX(REVERSE(col), '.', 2)
) t2 ON t2.id = t1.id
WHERE b.id IS NULL
如果您需要为此创建一个 UNIQUE 约束,您可以执行以下操作
1.添加另一个字段来保存域值
ALTER TABLE your_table ADD COLUMN `domain` VARCHAR(100) NOT NULL DEFAULT '';
2.用正确的值更新它
UPDATE your_table set domain = REVERSE(SUBSTRING_INDEX(REVERSE(col), '.', 2));
3.添加唯一约束
ALTER IGNORE TABLE your_table ADD UNIQUE domain (domain);
4.添加前插入前更新前触发器设置域列
DELIMITER $$
CREATE TRIGGER `your_trigger` BEFORE INSERT ON `your_table ` FOR EACH ROW
BEGIN
set new.domain = REVERSE(SUBSTRING_INDEX(REVERSE(new.col1), '.', 2));
END$$
CREATE TRIGGER `your_trigger` BEFORE UPDATE ON `your_table ` FOR EACH ROW
BEGIN
set new.domain = REVERSE(SUBSTRING_INDEX(REVERSE(new.col1), '.', 2));
END$$
DELIMITER ;
注意:这假设域是用“.”分隔的最后 2 个单词,它不适用于 ebay.co.uk 等域。为此,您可能需要创建一个存储函数,该函数返回给定主机的域并使用它而不是REVERSE(SUBSTRING_INDEX...
.