mysql - 更新重复的行,除了一个

标签 mysql sql

我有一个名为 simple_data 的表,该表在名为 MSISDN 的列中有数百万个手机号码,但它包含重复项。

所有行的 FLAG 列都设置为零。

我想通过将 FLAG 值设置为 2 来更新所有重复的行,除了一行。

CREATE TABLE `wt_simple_data` (
  `SIMPLEID` int(10) NOT NULL AUTO_INCREMENT,
  `CAMPID` bigint(20) NOT NULL,
  `MSISDN` bigint(20) NOT NULL,
  `FLAG` enum('0','1','2') DEFAULT '0' COMMENT '0 FOR NOT SENT, 1 FOR SENT',
  PRIMARY KEY (`SIMPLEID`)

) ENGINE=InnoDB  DEFAULT CHARSET=latin1

一些示例数据:

SIMPLEID  CAMPID     MSISDN        FLAG    
 15        311      9874123411      0    
 16        311      9874123411      0    
 17        311      9874123411      0    
 18        311      9874123412      0    
 19        311      9874123412      0    
 20        311      9874123413      0    
 21        311      9874123413      0    
 22        311      9874123414      0

我想要的结果

SIMPLEID  CAMPID     MSISDN        FLAG    
 15        311      9874123411      0    
 16        311      9874123411      2    
 17        311      9874123411      2    
 18        311      9874123412      0    
 19        311      9874123412      2    
 20        311      9874123413      0    
 21        311      9874123413      2    
 22        311      9874123414      0

最佳答案

您可以使用 JOIN 并将第一条记录保留为 0

update 
wt_simple_data w1 
join ( 
  select 
   min(SIMPLEID) as SIMPLEID,
   CAMPID,
   MSISDN 
   from wt_simple_data 
   group by CAMPID,MSISDN 
)w2 
on w1.SIMPLEID > w2.SIMPLEID 
and w1.CAMPID = w2.CAMPID 
and w1.MSISDN = w2.MSISDN 
set w1.FLAG = '2' 

关于mysql - 更新重复的行,除了一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29536429/

相关文章:

sql - 是否可以在单个查询中同时使用 order by 和 where

sql - 在 SQL 中,如何从包含图书馆表和图书表的数据库中创建包含图书数量的图书馆列表?

javascript - 在 HTML 5 SQL 查询中按列号检索列

mysql - 获取 friend 姓名的SQL表达式

sql - 数字匹配的 LINQ 查询

mysql - 标记值第一次出现在表中的时间

java - 在 jOOQ 中限定临时表列名

php - PDO/mySQL 如何绑定(bind)多个值来存储多行

带有变量的 PHP Math 不起作用

sql - 如何在 MS-ACCESS 中执行按位运算算法