mysql 删除冗余数据问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 01:51:30
现在我有一个Info表 其中主要字段为 ID,UserID,Company,Phone

ID为主键,自增

UserID,Company 为用户ID 和用户所在单位,两者联合起来对应唯一用户

Phone 为联系电话

现在有如下几种情况
联系电话 无 则phone为空的单条数据
ID UserID Company Phone
_______________________________
1 201 YH

联系电话 一个 形成phone非空单条数据
ID UserID Company Phone
_________________________________
1 201 YH 13000000000

联系电话 多个 形成phone非空单条数据
ID UserID Company Phone
__________________________________
1 201 YH 13000000000
2 201 YH 13000000001
3 201 YH 13000000006

在数据导入过程中产生了垃圾数据,形成了以下情况
__________________________________
1 201 YH
2 201 YH 13000000001
3 201 YH 13000000006

多条记录中有phone为空的数据

请问如何我才能delete掉这些空数据

我的设想是先查出有多条记录的ID

select ID from Info group by UserID,Company having count(*)>1<

不能用ID,因为你的ID是唯一识别的,要用UserID,另外判断为空要看清楚到底是空字符串还是null。用这句试试看:

delete from Info where UserId in (select UserId from info group by UserID,Company having count(*)>1) and (phone is null or phone = '')

因为select的字段必须包含在group by子句中,所以你按UserID和Company进行group时,是无法得出Id的,除非你这样做:

delete from Info where ID in (select ID from Info where UserId in (select UserId from info group by UserID,Company having count(*)>1) and Company in (select Company from info group by UserID,Company having count(*)>1) and (phone is null or phone = ''))