删除数据库表中某一字段相同的数据,并保留最新一条---Mysql

来源:互联网 发布:剑网三最帅花哥数据 编辑:程序博客网 时间:2024/04/29 11:59


今天碰到一个题,假如有一个person表,有id,和name两个字段,如果要删除存在name相同的字段的数据,并保留最新一条,sql怎么设计?

原本的设计如下,但是运行出错

DELETE FROM personWHERE (pname IN  (SELECT pname  FROM person  GROUP BY pname  HAVING COUNT(pname) > 1)) AND (id NOT IN  (SELECT MIN(id)  FROM person  GROUP BY pname  HAVING COUNT(pname) > 1));

错误原因:You can't specify target table for update in FROM clause

翻译过来的意思是:不能先select出同一表中的某些值,再update这个表(在同一语句中).

正确的写法是:

DELETEFROM  personWHERE  (    pname IN (      SELECT        n. pname      FROM        (          SELECT            pname          FROM            person          GROUP BY            pname          HAVING            COUNT(pname) > 1        ) n    )  )AND (  id NOT IN (    SELECT      i.id    FROM      (        SELECT          MIN(id) AS id        FROM          person        GROUP BY          pname        HAVING          COUNT(pname) > 1      ) i  ));


阅读全文
0 0
原创粉丝点击