问题描述:将重复字段对应的多个ID统一成一个,并将其他表中关联的ID统一
在一个数据库中有两个表:Field,FieldData
Field主要字段:FieldID,Name
FieldData主要字段:Time,FieldID(和Field表关联),DataValue
现在存在的问题:
在Field表中存在一些Name它们对应多个不同的FieldID,这些FIeldID在FieldData表中都有DataValue数据
如下:
Field表
FieldID Name
12 ZhangSan
24 ZhangSan
123 ZhangSan
42 Lisi
….(至少1W条数据)
FieldData表
Time FieldID DataValue
2010-1-1 12 A
2010-1-4 24 B
2010-1-5 123 C
2010-1-2 42 A
…(至少1W条数据) 现在需要将Field表中重复的Name的Field只取最小的那个值,比如ZhangSan只对应12,并且让FieldData表中的Fieldid 24,123都改为12.需要改后的结果如下:
Field表
FieldID Name
12 ZhangSan
42 Lisi
….(至少1W条数据)
FIeldData表
Time FieldID DataValue
2010-1-1 12 A
2010-1-4 12 B
2010-1-5 12 C
2010-1-2 42 A
…(至少1W条数据)

解决方案 »

  1.   

    --对Field表如下进行:
    delete Field from Field t where FieldID <> (select min(FieldID) from Field where Name = t.name)delete Field from Field t where FieldID not in (select min(FieldID) from Field where Name = t.name)
    --对FieldData表的结果怎么来的,没看明白.
      

  2.   

    --对FieldData表的修改(先执行这句。)
    update FieldData set FieldID=(select min(FieldID) from Field where Field.FieldID=FieldData.FieldID)
    --对Field表的修改(删除不必要的记录)
    delete from Field where FieldID<>(select min(FieldID) from Field where Name=Field.Name)--思路清楚,但不知道会不会报错      你试下吧