如果在多行中重复相同的列值,则UPDATE - SQL / MYSQL

时间:2016-11-01 00:29:07

标签: mysql sql

  • 如果在多行
  • 中重复相同列
  • 然后根据列值

  • 删除 整行
  • 更新基于相同列值的新行(即其他列值)

我有一张这样的表

create table if not exists cms(
  id int(11) not null auto_increment primary key,
  cms_id varchar(20),
  published_datetime varchar(30),
  last_modified_datetime varchar(30),
  score float,
  access_vector varchar(45),
  access_complexity varchar(45),
  authentication varchar(45),
);


INSERT INTO `cms` (`id`, `cms_id`, `published_datetime`, `last_modified_datetime`, `score`, `access_vector`, `access_complexity`, `authentication`) VALUES
(1, 'CMS-2002-0493', '2002-08-12T00:00:00.000-04:00', '2016-10-24T11:23:01.940-04:00', 7.5, 'NETWORK', 'LOW', 'NONE')

enter image description here

  • 现在在这个表中我不想允许重复的值 名为 cms_id

  • 的列
  • 为此,我不想为列 cms_id 设置唯一键 因为此列值将重复,然后根据此列值 cms_id ,其他列值可能会更改

  • cms_id 可能与其他列可以获得相同 不同的条目

  • 每次使用相同的 cms_id 值时,行中的其他列可能会有不同的条目

简单来说,如果重复 cms_id 的相同值,则更新整行(根据 cms_id 更新所有列)

现在我需要一个输出,例如只有最后插入的cms_id值应该出现在表中,其他所有相同的cms_id应该被删除并用最后一个条目更新

应删除主键1,613,1225的coulmn id,并且只应存在1837

我需要输出如下图像

enter image description here

完全它应该替换重复的 cms_id 列作为最后一个条目。

相应地,如果 cms_id 值重复,那么它应该删除现有的 cms_id 值,它应该按照最后一个插入条目更新所有其他列值,需要查询此< / p>

1 个答案:

答案 0 :(得分:2)

MySQL有一个特殊的REPLACE命令,其作用与INSERT完全相同,但如果主键或唯一值具有相同的值,它将替换该行。

REPLACE INTO cms ...

其中......表示查询的其余部分。

免责声明:此SQL语句是MySQL的特殊扩展;它不是SQL标准的一部分,可能不会在其他DBMS上工作。