我有一个名为 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/