删除重复行

 DELETE FROM ecm_member_login_session
WHERE (number , client_code) IN (
SELECT number, client_code FROM mall.ecm_member_login_session GROUP BY number , client_code HAVING COUNT(*) > 1)
AND update_time NOT IN (
SELECT MAX(update_time) FROM mall.ecm_member_login_session GROUP BY number , client_code HAVING COUNT(*) > 1);

但是报1093错误

 14:57:04    DELETE FROM ecm_member_login_session  WHERE (number , client_code) IN (   SELECT number, client_code FROM mall.ecm_member_login_session GROUP BY number , client_code HAVING COUNT(*) > 1)   AND update_time NOT IN (   SELECT MAX(update_time) FROM mall.ecm_member_login_session GROUP BY number , client_code HAVING COUNT(*) > 1)    

 Error Code: 1093. You can't specify target table 'ecm_member_login_session' for update in FROM clause    0.046 sec

后来在 嵌套查询语句里面再嵌套一层即可, 是因为mysql限制update(包括delete)操作表名与嵌套子查询语句里的表名一样的原因。

语句改为如下

 DELETE FROM ecm_member_login_session
WHERE (number , client_code) IN (
SELECT number, client_code from (SELECT number, client_code FROM ecm_member_login_session GROUP BY number , client_code HAVING COUNT(*) > 1) A)
AND update_time NOT IN (
SELECT update_time from (SELECT MAX(update_time) FROM ecm_member_login_session GROUP BY number , client_code HAVING COUNT(*) > 1) A);

mysql文档:

 上面是目前MYSQL5.0仍然有的限制,文档中说:

 In general, you cannot modify a table and select from the same table in a subquery. For example, this limitation applies to statements of the following forms:

 DELETE FROM t WHERE ... (SELECT ... FROM t ...);UPDATE t ... WHERE col = (SELECT ... FROM t ...);{INSERT|REPLACE} INTO t (SELECT ... FROM t ...);

 Exception: The preceding prohibition does not apply if you are using a subquery for the modified table in the

 FROM

 clause. Example:

 UPDATE t ... WHERE col = (SELECT (SELECT ... FROM t...) AS _t ...);

 Here the prohibition does not apply because a subquery in the

 FROM

 clause is materialized as a temporary table, so the relevant rows in

 t

 have already been selected by the time the update to

 t

 takes place. 

参考:

mysql error 1093 解决方法
SQL删除重复数据只保留一条

http://blog.163.com/xiaoqiu_1120/blog/static/121632322007112411424982/

mysql 删除重复数据,并保存最新一条数据的更多相关文章

  1. mysql删除重复记录,保存Id最小的一条

    方法1:1.创建一个临时表,选取需要的数据.2.清空原表.3.临时表数据导入到原表.4.删除临时表.mysql> select * from student;+----+------+| ID ...

  2. SQL server 存储过程 C#调用Windows CMD命令并返回输出结果 Mysql删除重复数据保留最小的id C# 取字符串中间文本 取字符串左边 取字符串右边 C# JSON格式数据高级用法

    create proc insertLog@Title nvarchar(50),@Contents nvarchar(max),@UserId int,@CreateTime datetimeasi ...

  3. mysql删除重复数据只保留一条

    mysql删除重复数据只保留一条 新建一张测试表: CREATE TABLE `book` ( `id` char(32) NOT NULL DEFAULT '', `name` varchar(10 ...

  4. mysql中删除重复记录,只保留一条

    表结构如下: mysql> desc test1; +--------------+------------------+------+-----+---------+------------- ...

  5. 【转载】如何删除Windows远程桌面保存的账号密码数据

    在Windows系统中,无论是win7.win8还是win10系统,都可使用Windows系统自带的远程桌面连接工具来远程服务器,很多时候Windows远程桌面在连接一次后会自动保存连接的账号密码等信 ...

  6. 转: 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  7. 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  8. hibernate向mysql插入数据后,得到该条数据主键的方法

    hibernate向MySQL插入一条数据后,得到该条数据主键的方法.主键是自增长的. 保存完成后,直接用该实体的getId的方法就可以得到.因为保存完成后,hibernate会自动将id赋值给实体. ...

  9. SQL分组排序后取每组最新一条数据的另一种思路

    在hibernate框架和mysql.oracle两种数据库兼容的项目中实现查询每个id最新更新的一条数据. 之前工作中一直用的mybatis+oracle数据库这种,一般写这类分组排序取每组最新一条 ...

随机推荐

  1. Node.js使用Mongoose包操作MongoDB数据库

    1. 安装Mongoose npm install mongoose 2. 使用 2.1 创建连接 var mongoose = require('mongoose'); mongoose.conne ...

  2. yield和python(如何生成斐波那契數列)

    您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ? 我们先抛开 generator,以一个常见的编程题目来展示 yield ...

  3. POJ 2386 Lake Counting(深搜)

    Lake Counting Time Limit: 1000MS     Memory Limit: 65536K Total Submissions: 17917     Accepted: 906 ...

  4. redshift编译遇到的错误(ubuntu14.04)

    1. ./bootstrap: 6: ./bootstrap: autopoint: not found 解决方法: $ sudo apt-get install autopoint 2. autor ...

  5. php 简单分页类

    /**  file: page.class.php   完美分页类 Page  */ class Page {  private $total;          //数据表中总记录数  privat ...

  6. PHPCMSv9首页显示分页点击下一页跳转链接出现错误,跳转到后台的解决方案

    1 引用页写为 {pc:content action="lists" catid="10" order="updatetime DESC" ...

  7. 编译安装redis

    一.版本说明 CentOS版本 [root@localhost ~]# uname Linux [root@localhost ~]# uname -r 2.6.32-431.el6.i686 [ro ...

  8. oracle自定义判断数据是否为数值函数

    CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2) RETURN NUMBER IS v_str ); BEGIN IF str IS NUL ...

  9. css div垂直居中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. json跨域

    很有意思的两种连接 ,效果相同. 不同之处: aehyok({"result":"我是远程js带来的数据"}); <script type="t ...