我有一个包含如下数据的表格:
id | link | name | date
1 aa bob 1
1 aa tom 2
1 bb tom 3
2 cc lora 4
这意味着我可以在任何列中没有唯一的值,但我不能在同一行中具有相同的 id
link
name
(日期并不重要)。这是我不能拥有的示例:
id | link | name | date
1 aa bob 1
1 aa bob 2
我尝试过:
ALTER TABLE table ADD UNIQUE KEY `uk_id_link_name` (id, link, name);
还有:
ALTER TABLE `table` ADD UNIQUE `unique_index`(`id`, `link`, `name`);
但它给了我一个错误:
Duplicate entry
如何创建唯一的行(不唯一的列值的组合)?
编辑:我不想从表中删除重复项。
最佳答案
您的表已经违反了唯一约束。所以你需要摆脱那些有问题的值(value)观。
您可以删除除最早日期之外的所有日期:
delete t
from t join
(select id, link, name, min(date) as mindate
from t
group by id, link, name
) tt
using (id, link, name)
where date > mindate;
当数据兼容时,可以添加唯一约束。
注意:在执行此操作之前备份/制作表的副本,这样您就不会丢失可能真正需要的数据。
关于mysql - 如何使列值的唯一组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53171251/