sql - 错误 #1093 - 表被指定了两次,既作为“删除”的目标,又作为数据的单独源
问题描述
我正在尝试删除表中的重复行。电子邮件字段在表中必须是唯一的,才能运行之后的代码。这是我的代码:
DELETE FROM deleteRequests
WHERE Email NOT IN (
SELECT MAX(Email)
FROM deleteRequests
GROUP BY email);
我得到的错误是:'#1093 - 表'deleteRequests'被指定了两次,既作为'DELETE'的目标,又作为数据的单独源'
我认为问题在于我使用的是 mariadb 10.2(这也意味着我不能使用 WITH CTE)。我无法控制更新它,所以我需要一个解决方法。建议?
解决方案
MySQL,MariaDB 不允许在 a DELETE
or中再次引用该表UPDATE
。一个简单的解决方法是使用JOIN
:
DELETE dr
FROM deleteRequests dr LEFT JOIN
(SELECT MAX(email) as max_email
FROM deleteRequests
GROUP BY email
) dr2
ON dr2.email = dr.max_email
WHERE dr2.max_email IS NOT NULL;
当然,这个查询是没有意义的,因为您正在聚合email
并选择最大值——所以所有非NULL
电子邮件都会匹配。
也许你想HAVING COUNT(*) = 1
在子查询中,。
推荐阅读
- javascript - AWS S3 Post InvalidPolicydocument 错误:无效的简单条件
- ios - SwiftUI CloudKit 在保持活动状态时不刷新视图
- java - 我可以在没有 getParcelableExtra 的情况下以第一个活动中收到的意图开始第二个活动吗?
- swift - 如何在 WidgetKit 中重置意图扩展配置
- javascript - Google App 脚本 onEdit 函数未从具有公式的单元格中获取输入
- java - Spring数据jdbc错误BadSqlGrammarException: PreparedStatementCallback; 糟糕的 SQL 语法
- qt - 从 Listview 拖动到放置区域
- java - JndiObjectFactoryBean 无法引用 SqlSessionFactory
- typescript - 未调用设置方法
- javascript - 如何在 req.body 上保留对象的 __proto__ 原型?