陆氏医院:mysql 删除冗余数据问题

来源:百度文库 编辑:高考问答 时间:2024/04/28 07:11:47
现在我有一个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查找空记录把记录删除掉

但 delete from Info where ID in

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

and Phone = ''; 这句语句执行有错误,请各位帮忙,指教下到底该怎么

写这句sql
看了下面仁兄的回答 userid 不是为唯一 就确定不了哪个是需要删除的数据了,按照你的语句就会把 其他公司 同一个userid的空数据删除掉 所以不够精准,只有id 是唯一的 才能确定我要删除哪个

不能用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 = ''))