使用できる重複を削除するには
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...
。