select-Mysql删除重复数据只保留一条

问题描述

Mysql删除重复数据只保留一条

Mysql删除重复数据只保留一条,我的sql这样的
DELETE from t_patient WHERE pa_iid IN (select pa_iid from t_patient group by pa_vname having count(pa_vname)>1)
但是报错了:
[Err] 1093 - You can't specify target table 't_patient' for update in FROM clause
求大神,怎么解决

解决方案

参考下这个:http://blog.csdn.net/softwave/article/details/3890576

解决方案二:

改成

 DELETE from t_patient WHERE pa_iid IN (
 select pa_iid from (select pa_iid from t_patient group by pa_vname having count(pa_vname)>1) t )

或者

 create table tmp as select min(pa_iid) as col1 from t_patient group by pa_vname ;
delete from t_patient where pa_iid not in (select col1 from tmp);
drop table tmp;

解决方案三:

DELETE
FROM
mp USING MusicTopMap AS mp,
(SELECT
MIN(id) AS id,
musicId,
top,
COUNT(top) AS count_
FROM
MusicTopMap
GROUP BY musicId,
top
HAVING COUNT(top) > 1) tmp
WHERE mp.musicId = tmp.musicId
AND mp.top = tmp.top
AND mp.id > tmp.id

参考下这个  我这个是MYSQL数据库,留下的是ID最大的一条,自己执行过 没有问题!

解决方案四:

分2条sql吧,先查出所有需要删除的id,然后再删除

时间: 2024-09-12 02:43:12

select-Mysql删除重复数据只保留一条的相关文章

SQL删除重复数据只保留一条

  用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只

oracle删除重复数据只保留一条

重复的数据可能有这样两种情况,第一种: 表中只有某些字段一样,第二种是两行记录完全一样. 一.对于部分字段重复数据的删除 1.查询重复的数据 select 字段1,字段2, count(*) from 表名 group by 字段1,字段2 having count(*) > 1 例:Select owner from dba_tables group by owner having count(*)>1; Select owner from dba_tables group by owner

JS数组去掉重复数据只保留一条的实现代码_javascript技巧

非常不多说,js数组去掉重复数据的代码如下所示: var arr = [1,2,3,4,5,6,1,6,7,2]; var newArr = []; for(var i =0;i<arr.length-1;i++){ if(newArr.indexOf(arr[i]) == -1){ newArr.push(arr[i]); } } 下面再给大家分享高效率去掉js数组中重复项 Array类型并没有提供去重复的方法,如果要把数组的重复元素干掉,那得自己想办法: function unique(ar

解决Oracle删除重复数据只留一条的方法详解_oracle

查询及删除重复记录的SQL语句1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where  Id in (select Id from 表 group by Id having count(Id) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id)

用SQL语句,删除掉重复项只保留一条

原文 用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,

mysql 数据表合并并且只重复数据只读取一条

mysql教程 数据表合并并且只重复数据只读取一条 //首先我们来盾mysql sql结构了,用了union联合查询与insert into 来整表复制了. mysql_connect("localhost","root","root") or die('Database Server Uid or Password Error!'); mysql_select_db('ip') or die('data !'); mysql_query(&qu

mysql删除重复数据记录sql语句总结

我最常用的方法是  代码如下 复制代码 //删除id重复的数据,适合id是手工主键 delete person as a from person as a, (     select *,min(id) from person group by id having count(1) > 1 ) as b where a.id = b.id //查找重复的,并且除掉最小的那个  代码如下 复制代码 delete tb_person as a from tb_person as a, ( selec

linuxshell删除重复文件只保留一份

  #!/bin/bash #name:remove_one.sh #用途:查找并删除重复文件,每个文件只保留一个样本 #将文件依据大小排序并输出 ls -lS | awk 'BEGIN { #得到第一行total总数并丢弃,读取下一行 getline;getline; name1=$9;size=$5; } { name2=$9; if(size==$5) #大小一样的可能是内容相同的文件 { #用md5进行校验和 ("md5sum "name1)|getline; csum1=$1

MYSQL删除重复数据的简单方法_Mysql

复制代码 代码如下: CREATETABLE`users`(`id`int(10)NOTNULLAUTO_INCREMENT,`name`char(50)NOTNULL,PRIMARYKEY(`id`)) 复制代码 代码如下: deletefromuserswhereidin(selectmin(id)fromusersgroupbynamehavingcount(name)>1); 结果报错:1093youcan'tspecifytargettable.... 原因是mysql删除动作不能带有