我有一个名为的表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
Run Code Online (Sandbox Code Playgroud)
一些示例数据:
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
Run Code Online (Sandbox Code Playgroud)
我想要的结果
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
Run Code Online (Sandbox Code Playgroud)
您可以使用 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'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1480 次 |
| 最近记录: |