-- 方法一 /** 错误码: 1093 You can't specify target table 'an' for update in FROM clause 用在select里的表,不能同时被修改 **/ DELETE an FROM t_anchor_cp an WHERE an.c_order IN ( SELECT t0.c_order FROM t_anchor_cp t0,( SELECT t1.c_foreign_id,t1.c_line_type_id,t1.c_anchor_no FROM t_anchor_cp t1 GROUP BY t1.c_foreign_id,t1.c_line_type_id,t1.c_anchor_no HAVING COUNT(*)>1 )t2 WHERE t0.c_anchor_no = t2.c_anchor_no AND t0.c_foreign_id = t2.c_foreign_id AND t0.c_line_type_id = t2.c_line_type_id AND t0.c_order NOT IN ( SELECT MIN(c_order) FROM t_anchor_cp t1 GROUP BY t1.c_foreign_id,t1.c_line_type_id,t1.c_anchor_no HAVING COUNT(*)>1 ) ) -- 方法2 成功执行 使用临时表 DELETE an FROM t_anchor_cp an,( SELECT t0.c_order FROM t_anchor t0,( SELECT t1.c_foreign_id,t1.c_line_type_id,t1.c_anchor_no FROM t_anchor_cp t1 GROUP BY t1.c_foreign_id,t1.c_line_type_id,t1.c_anchor_no HAVING COUNT(*)>1 )t2 WHERE t0.c_anchor_no = t2.c_anchor_no AND t0.c_foreign_id = t2.c_foreign_id AND t0.c_line_type_id = t2.c_line_type_id AND t0.c_order NOT IN ( SELECT MIN(c_order) FROM t_anchor_cp t1 GROUP BY t1.c_foreign_id,t1.c_line_type_id,t1.c_anchor_no HAVING COUNT(*)>1 ) )tt WHERE tt.c_order = an.c_order -- 方法三 创建临时表,用于查询,数据量少的话 CREATE TABLE t_anchor_cp SELECT * FROM t_anchor
MySQL Error 1093 - Can't specify target table for update in FROM clause
引用
***************
*Cheekysoft:***
***************
In MySQL, you can't modify the same table which you use in the SELECT part.
Alternatively, try nesting the subquery deeper into a from clause ...
If you absolutely need the subquery, there's a workaround, but it's ugly for several reasons, including performance:
UPDATE tbl SET col = (
SELECT ... FROM (SELECT.... FROM) AS x);
The nested subquery in the FROM clause creates an implicit temporary table, so it doesn't count as the same table you're updating.
发表评论
-
linux 安装mysql多个实例
2020-03-13 15:47 426mysql5.7.28多实例 安装mysql,不要启动 创 ... -
mongodb安全验证 密码登录
2020-03-09 16:07 8391、创建用户 cd /d C:\Program Files\ ... -
索引的创建对查询性能影响
2019-08-19 15:14 686索引的正确使用,对查询的性能影响很大 原查询,要2分多 ... -
mysql查询性能优化,650秒优化到0.18秒
2019-08-14 17:57 29开发人员技术水平不一,写出的sql执行性能怎么样,完全靠运气, ... -
MySQL 高可用集群架构 MHA 详解
2018-03-09 09:28 802MySQL 高可用集群架构 MHA ... -
B+tree 索引
2018-03-09 09:11 752mysql和oracle都用到B+tree ... -
怎么查看和修改 MySQL 的最大连接数
2018-03-09 08:47 1123通常,mysql的最大连接数默认是100, 最大可以达到163 ... -
rsync备份和删除指定文件
2018-01-02 10:23 2062文件异地备份时,需要将本地文件合并到服务器上,且不能删除服务器 ... -
windows mysql定时备份任务
2017-11-03 16:12 1007mysqlbak.cmd echo off set tx ... -
mysql 1418错误原因及解决
2017-09-30 11:14 1142SET GLOBAL log_bin_trust_functi ... -
windows上oracle11配置监听器
2017-08-23 14:00 1778oracle11 windows版安装后默认通过计算机名 ... -
centos yum 安装mysql
2016-08-11 10:08 532查看这篇文章 http://dev.mysql.com/dow ... -
expdp\impdp及exp\imp
2016-08-03 14:29 765作者写的文章很实用 ht ... -
oracle drop记录
2016-07-21 14:07 1594数据库中缺表了,查一下是什么时候删除的 select * ... -
powerdesigner 16 从数据库生成表结构无响应
2016-07-15 09:35 1335怪事了,powerdesigner从数据库反向生成表结构是,卡 ... -
oracle 删除和重建表空间脚本
2016-07-07 11:23 2612调试数据库生成脚本,需要频繁重建表空间 /** ... -
plsql11 x64 安装和配置 解决OCI: not initialized
2016-06-18 09:38 16967下载了instantclient-basic-windows. ... -
oracle instantclient和plsql配置
2016-05-23 14:47 7431、下载instantclient 下载后多解压到某文件夹下 ... -
oracle AL32UTF8 zhs16gbk 安装字符编码
2016-05-23 14:30 1563NLS_LANG是环境变量,包括3部分NLS参数:NLS_LA ... -
oracle静默安装
2016-05-23 14:29 651oracle11G静默安装过程——linux环境 1.操作 ...
相关推荐
4. **删除重复数据**:如果你希望彻底删除重复数据,只保留一条,可以使用`DISTINCT`关键字创建一个新的表,或者使用`DELETE`语句结合子查询。但请注意,删除操作应谨慎进行,以免丢失重要信息。例如: ```sql ...
mysql彻底理解删除重复记录sql脚本,只保留一条记录
本文将详细介绍如何在MySQL中查找并删除重复数据,同时只保留其中一条,具体以实例进行解析。 首先,假设我们有一个名为`test`的表格,包含以下字段:`school_id`、`school_name`、`total_student`和`test_takers`...
本文主要探讨如何查询并删除MySQL中的重复数据,同时保留每个重复组中ID最小的一条记录。 首先,我们需要找到表中的重复数据。假设我们有一个名为`brand`的表,其中包含品牌名称`brandName`和其他字段,而我们想要...
在MySQL数据库中,有时我们可能面临清理重复数据的需求,尤其是当数据录入时出现错误或导入过程中发生重复,这时需要保留一份记录,通常是保留ID最小的那一条。以下是一种常见的解决方案,用于删除重复数据并保留每...
在MySQL数据库中,存储过程是一种预编译的SQL语句集合,可以用于执行复杂的数据库操作,如删除重复记录。在给定的存储过程`DelDuplicateRecord`中,它旨在删除具有相同标题的记录,但仅保留每个标题下最早的一条记录...
在一个表中,如果根据特定的一个或多个字段,有多条记录具有完全相同的值,那么这些记录就被称为重复记录。例如,表`YourTable`中,`name`和`value`字段的组合重复了多次,导致数据冗余。 ### 方法1:基于`NOT IN`...
- 创建一个临时表`tmp`,通过`DISTINCT`关键字去除重复记录。 - 删除原始表`tableName`。 - 将临时表`tmp`的数据复制回`tableName`。 - 删除临时表`tmp`。 2. **SQL Server** - 使用`SELECT DISTINCT`语句创建...
5. **删除重复**:确定哪些记录是重复的后,可以决定保留其中一条并删除其他。这通常在 OnNewRecord 或 OnPost 事件中完成。可以使用 TDataSet 的 Delete 方法来删除特定记录。 以下是一个简单的示例代码片段,展示...
2. 保留一条(更安全的选择): ```sql DELETE FROM HZT WHERE ID NOT IN (SELECT MAX(ID) FROM HZT GROUP BY Title) ``` 此方法将保留每个重复组中`ID`最大的记录,删除其他重复的记录。 如果重复记录是基于...
游标允许逐行处理数据,适合于复杂的数据操作,例如在删除重复记录时,保留特定条件下的第一条记录。然而,这种方法通常效率较低,不推荐在大数据量的情况下使用。 总之,处理数据库中的重复记录是一个常见的任务,...
这样可以确保每组重复行中只保留一条记录,而不会破坏数据的完整性。 执行完这个删除操作后,`relation`表应该只剩下了不重复的行。在本例中,结果应为: ``` id userId fanId 1 1 1 4 2 2 6 3 3 ``` 总结来说,...
在确认了哪些行是重复的之后,下一步是删除重复行,但保留其中的一条。通常,选择保留的标准可能因需求而异,可能是最早的记录(根据主键的最小值),也可能是其他具有特定字段最大值的记录。在这个例子中,我们假设...
但是,这个操作会删除所有重复的记录,不只是保留一条: ```sql ALTER IGNORE TABLE `event` ADD UNIQUE INDEX `idu_sid` (`sid`); ``` 随后,为了恢复原表结构,你需要移除新添加的唯一索引: ```sql ...
例如,假设表`t`有`id`(主键)、`name`和`address`字段,我们希望去除`name`和`address`字段组合重复的记录,保留每组重复记录中的任意一条。在这种情况下,可以使用相关子查询来实现: ```sql SELECT * FROM t t1...
下面将详细介绍几种在MySQL中去除重复行的方法。 1. **表替换法** 这种方法适用于任何类型的表,不论其存储引擎。首先创建一个新的临时表,结构与原表相同,并插入原表中不重复的记录。然后删除原表,最后将临时表...