如何使列值唯一组合?

时间:2018-11-06 11:44:58

标签: mysql sql

我有一张表,上面有这样的数据:

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 个答案:

答案 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,链接,名称

如果查询返回行,则必须在创建唯一约束之前解决这些重复项。