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为主键,自增
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 = ''))