有下面这样一个表
姓名 业务号 号码 地址 类型 标识
赵一 NULL 123456 地址1 0 NULL
李二 2 123456 地址1 1 A
张叁 NULL 123456 地址1 1 NULL
李肆 43 123456 地址2 0 B
王五 NULL 123456 地址2 0 NULL
刘六 NULL 123456 地址2 0 NULL
康七 NULL 123456 地址2 0 NULL
杨八 NULL 123456 地址2 1 NULL
需要实现下面的要求
- 效果1:将相同地址的筛选出来
- 效果2:同一地址的业务号填充为相同数值(比如原来李二业务号是2,那么和他同地址的赵一和张叁业务号都填充为2)
- 效果3:同一地址的标识填充为相同数值
- 效果4:但是上面2条规则对类型为1的不适用(他们既不用其他人的数据填充自己的NULL,用不用自己的数据填充别人的NULL)
result1
姓名 业务号 号码 地址 类型 标识
赵一 NULL 123456 地址1 0 NULL
李二 2 123456 地址1 1 A
张叁 NULL 123456 地址1 1 NULL
result2
李肆 43 123456 地址2 0 B
王五 43 123456 地址2 0 B
刘六 43 123456 地址2 0 B
康七 43 123456 地址2 0 B
杨八 NULL 123456 地址2 1 NULL
能不能只用SQL实现这样的需求(如果不能,用什么辅助比较好),什么样的算法效率高(大量数据)?
一条SQL好像无法实现,需要分步处理
1、对【地址】分组
对 地址 字段用 group by 地址
然后having 中 count(地址) > 1
接着where 排除掉 业务号 is null 的记录
2、对第一步取出的数据,输出到一个缓存表,主键为 地址,字段2为 业务号
然后用【地址】字段对主表与缓存表建立关联,更新主表的 业务号 is null的字段