我有一张表,上面有这样的数据:
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`);
但这给我一个错误:
重复输入
如何制作唯一的行(不唯一的列值组合)?
编辑:我不想从表格中删除重复项。
答案 0 :(得分:2)
您的表已违反唯一约束。因此,您需要摆脱有问题的值。
您可以删除除最早日期以外的所有日期:
{{1}}
当数据兼容时,您可以添加唯一约束。
注意:在执行此操作之前,请备份/制作表的副本,这样就不会丢失您可能真正需要的数据。
答案 1 :(得分:0)
SQL Server的正确语法应为下一个:
ALTER TABLE TableName ADD CONSTRAINT ConstraintName UNIQUE (id, link, name)
但是在创建约束之前,您当然应该确保不存在约束约束的行,例如,使用以下查询:
SELECT id, link, name, COUNT(*)
FROM TableName
GROUP BY id, link, name
HAVING COUNT(*) >= 2
此查询按三个字段返回重复项分组:id,链接,名称
如果查询返回行,则必须在创建唯一约束之前解决这些重复项。