delete
FROM vtiger_accountscf a
WHERE (
a.cf_466
)
IN (SELECT `cf_466` 
FROM vtiger_accountscf
GROUP BY `cf_466` 
HAVING count( * ) >1
)
AND id NOT 
IN (SELECT min( id ) 
FROM vtiger_accountscf
GROUP BY `cf_466` 
HAVING count( * ) >1

删除重复记录但是显示的是MySQL 返回: 
 [code]
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE (
a.cf_466
)
IN (SELECT `cf_466` 
FROM vtiger_accountscf
GROUP BY' at line 3  [/code]这是为什么呢?

解决方案 »

  1.   

    删除cf_466重复值的记录,只保留ID值最小的那条记录,则如下操作:
    delete from vtiger_accountscf a where not exists (select 1 from vtiger_accountscf
     b where b.cf_466=a.cf_466 and b.id<a.id)
      

  2.   

    IN (SELECT `cf_466` 
    FROM vtiger_accountscf
    GROUP BY `cf_466` 
    HAVING count( * ) >1
    )
    AND id NOT 
    IN (SELECT min( id ) 
    FROM vtiger_accountscf
    GROUP BY `cf_466` 
    HAVING count( * ) >1
    )
    是不是这两个分组没对应
    加个wher group1.cf_466=group2.cf_466
      

  3.   

    MySQL 中的DELETE语法有些限制。改成如下试试。delete a from vtiger_accountscf a left join (
    select cf_466,min(id) as minID from vtiger_accountscf GROUP BY `cf_466` 
    ) b on a.cf_466=b.cf_466 and a.id=b.minid
    where b.cf_466 is null