我有一张表,上面有这样的数据:
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`);
但它给了我一个错误:
重复条目
如何生成唯一行(非唯一列值的组合)?
编辑:我不想从表中删除重复项。
2条答案
按热度按时间xcitsw881#
您的表已经违反了唯一约束。所以你需要摆脱那些令人不快的价值观。
您可以删除除最早日期以外的所有日期:
当数据兼容时,可以添加唯一约束。
注意:在执行此操作之前备份/复制表,这样就不会丢失可能真正需要的数据。
mwkjh3gx2#
sql server的正确语法如下:
但是在创建约束之前,您当然应该确保不存在约束的行,例如使用以下查询:
此查询返回按以下三个字段分组的重复项:id、link、name
如果查询返回行,则必须在创建唯一约束之前解决这些重复项。