MySQL查询重复数据

转载  华仔   2020-05-23   95人阅读  0 条评论

 

假设有一个用户表 user,数据如下:

1、查询表中 uid 重复的数据

SELECT
  id,
  uid,
  nameFROM USERWHERE uid IN (SELECTuid  FROM USER
  GROUP BY uid  HAVING COUNT(uid) > 1);

 

2、查询表中重复数据,排除最小id

SELECT
  id,
  uid,
  nameFROM userWHERE uid IN (SELECTuid  FROM user
  GROUP BY uid  HAVING COUNT(uid) > 1)AND id NOT IN (SELECTMIN(id)  FROM user
  GROUP BY uid  HAVING COUNT(uid) > 1);

 

3、删除表中重复数据,如果是重复数据,则保留id最小的一条

DELETE
  FROM USERWHERE id IN (SELECT  u.idFROM (SELECTid      FROM USER  WHERE uid IN (SELECT  uidFROM USERGROUP BY uidHAVING COUNT(uid) > 1)      AND id NOT IN (SELECT  MIN(id)FROM USERGROUP BY uidHAVING COUNT(uid) > 1)) AS u);

 

4、遇到的问题:

一开始直接使用以下语句删除,报错:You can’t specify target table ‘user’ for update in FROM clause

 

DELETE
  FROM USERWHERE id IN (SELECT  idFROM USERWHERE uid IN (SELECTuid      FROM USER  GROUP BY uid      HAVING COUNT(uid) > 1)AND id NOT IN (SELECTMIN(id)      FROM USER  GROUP BY uid      HAVING COUNT(uid) > 1));

 

 

查资料后得知:
因为在 MYsql 里,不能先 select 一个表的记录,在按此条件进行更新和删除同一个表的记录。
解决办法:
将 select 得到的结果,再通过中间表 select 一遍。
SQL如下:

 

DELETE
  FROM USERWHERE id IN (SELECT  u.idFROM (SELECTid      FROM USER  WHERE uid IN (SELECT  uidFROM USERGROUP BY uidHAVING COUNT(uid) > 1)      AND id NOT IN (SELECT  MIN(id)FROM USERGROUP BY uidHAVING COUNT(uid) > 1)) AS u);

 


本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

本文地址:https://www.zjh336.cn/?id=1813
温馨提示:文章内容系作者个人观点,不代表华仔部落对观点赞同或支持。
版权声明:本文为转载文章,来源于 华仔 ,版权归原作者所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?