mysql补齐缺省数据思维?

数据在mysql中有几百万条,现在每个id下面的类别信息都不完整,需要补齐类别并置为0,需要怎么弄呢?
假设下表B,是这样的(–只是为了格式):

id class_id class info

1 ----- 1 ------ 明星 。。。。。

2 --------------- 军事 。。。。。

3 ------ 3------- ---------- 。。。。。

4 ---------------- ---------- 高考分数

类别表C

class_id class

1 ---- 明星

2 ----- 军事

3 -----体育

4 -----高考

比如上面这样的一个情况,你需要补齐类别信息,class_id或者class信息。

一、首先,使用select统计缺失情况。

统计class_id缺失的有多少:select count(*) from b where class_id is null or class_id = ’ ’ and class is not null;

统计class缺失的有多少:select count(*) from b where class is null or class_id = ’ ’ and class_id is not null;

在正式更新之前,建议,先备份一次,或者创建一张复制表。

create table b_test select * from b; 数据太大,就换一种方式:

create table b_test select * from b where 1=2; 这样就只创建一张表结构,没有数据,

装载数据:

insert into b_test select * from b where id <20000;

依次类推,直到装载完毕。千万不要直接在原表上直接更新。

如果统计的数量较多,例如超过10w,请分批执行。

补齐class:update b_test,c set b_test.class=c.class where b_test.class_id=c.class_id and b_test.id in (select id from b_test where class is null or class_id = ’ ’ and class_id is not null limit 0,20000);

每次只会2w行的更新,多次执行上面SQL语句,对应修改 b_test.id in (select id from b_test where class is null or class_id = ’ ’ and class_id is not null limit 20000,40000);

依次类推。

补齐class_id:其实也一样:

update b_test,c set b_test.class_id=c.class_id where b_test.class=c.class and b_test.id in (select id from b_test where class is null or class_id = ’ ’ and slass_id is not null limit 0,20000 ;

使用统计的SQL,确认一次,是否还有没有修改到的。

最后剩下,class和class_id都没有的,

你可能只有手动处理了。或者

update b_test set b_test.id=4,b_test.class=‘高考’ where info like ‘%高考%’;
如果有疑问,留言

你可能感兴趣的:(数据库)