CREATE TABLE `contact_group` (
  `CONTACT_GROUP_ID` int(9) NOT NULL AUTO_INCREMENT,
  `USER_ID` int(9) DEFAULT NULL,
  `CONTACT_ID` int(9) DEFAULT NULL,
  `TYPE_ID` int(9) DEFAULT NULL,
  `FRIEND_ID` int(9) DEFAULT NULL,
  `FRIEND_NAME` varchar(128) DEFAULT NULL,
  `NAME_CHAR` char(1) DEFAULT NULL,
  PRIMARY KEY (`CONTACT_GROUP_ID`),
  KEY `idx_contact_group_user_type` (`USER_ID`,`TYPE_ID`),
  KEY `idx_contact_group_contact_id` (`CONTACT_ID`),
  KEY `idx_contact_group_mobile` (`MOBILE_NUMBER`)
) ENGINE=InnoDB AUTO_INCREMENT=434 DEFAULT CHARSET=utf8;查询contact_group里,所有的user_id,friend_id,type_id完全相同的数据,删除多余的,保留一条。
CONTACT_GROUP_ID 和其他表关联,不能考虑建临时表,复制数据的方法。
要求用存储过程实现需求。
小弟学别的语言的,对SQL语言不是很了解,谢谢各位大哥大姐们给出具体怎么实现过程,
谢谢了!!

解决方案 »

  1.   

    所有的user_id,friend_id,type_id完全相同的数据,删除多余的,保留一条。:什么标准,CONTACT_GROUP_ID 最小?
      

  2.   

    下面语句保留 CONTACT_GROUP_ID 最小的一条。delete a from contact_group a ,contact_group b 
    where a.user_id=b.user_id 
    and a.friend_id=b.friend_id 
    and a.type_id=b.type_id
    and a.CONTACT_GROUP_ID>b.CONTACT_GROUP_ID
      

  3.   

    另外你提供的create table 语句中,(`MOBILE_NUMBER`) 这一列并不存在,会报错的。
    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
      

  4.   

    这里的数据量很大,用这条SQL有可能会把数据库执行崩溃!-