mysql - 如何使列值的唯一组合?

标签 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`);

但它给了我一个错误:

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/

相关文章:

php - 我无法处理 php mysql 登录页面

sql - Hive 多选

php - SQLSTATE[42000] : Syntax error or access violation

javascript - Node-Mysql抛出连接超时

SQL - 将列数据从一个表添加到另一个表,同时保留原始数据

mysql - 获取输出结果作为 SQL 中的列

sql - 创建产品用户配置文件时出现问题

php - 查询或 PHP 中的 MySQL 更新和求和

PHP MySQL : Data is getting reset to 0's when trying to edit

MySQL 使用 Group By 多列求和