真的居然还不对,这样是的所有符合条件的都删除了,并没有保留ID最小的那条:
mysql_query("DELETE FROM member WHERE openid = 'om-OA047C5ZA0wNzVvG_haHcIjXM' AND id NOT IN (select * from (SELECT min(id) FROM member GROUP BY openid HAVING count(openid) > 1)as a)");
你参杂一些其它数据在里面再测试下,因为还有username 不等于 'tt'的数据,所以ID也有其它的,不一定是的1开始的,但要保留username = 'tt'最小ID的那条数据
mysql_query("DELETE FROM member WHERE openid='om-OA0-eLB0RIBFP27hS6YxDxQHg' AND id NOT IN (SELECT min(id) FROM member GROUP BY openid HAVING count(openid) > 1)");[/quote]
修改后:
DELETE FROM test
WHERE username = 'tt'
AND id NOT IN (
select * from
(
SELECT min(id) FROM test
GROUP BY username
HAVING
count(username) > 1
)as a
);
删除前:
测试了一下,无效,删除不了:
mysql_query("DELETE FROM member WHERE openid='om-OA0-eLB0RIBFP27hS6YxDxQHg' AND id NOT IN (SELECT min(id) FROM member GROUP BY openid HAVING count(openid) > 1)");
DELETE FROM member
WHERE username IN (
username='arut'
)
AND userid NOT IN (
SELECT min(userid) FROM member
GROUP BY username
HAVING
count(username) > 1
)
这样吗?
删除表中多余的重复记录,重复记录是根据单个字段(username)来判断,只留有userid最小的记录:
DELETE FROM member
WHERE username IN (
SELECT username FROM member
GROUP BY username
HAVING
count(username) > 1
)
AND userid NOT IN (
SELECT min(userid) FROM member
GROUP BY username
HAVING
count(username) > 1
)
你如果只要username = 'arut'的话,把username IN (...) 换成username = 'arut' 即可