Mysql 为什么要使用子查询来获取原始表?

Mysql 为什么要使用子查询来获取原始表?,mysql,sql,subquery,Mysql,Sql,Subquery,我遇到了一个来自Leetcode的问题 一种方法如下: 从某人处删除 Id不在SELECT MINp中。Id来自SELECT*FROM Person p 通过电子邮件分组 我想知道为什么它需要表本身的子查询从SELECT*FROM Person中选择MINp.Id,而不是从Person p中选择MINp.Id这是MySQL中的一个漏洞。MySQL不允许DELETE或UPDATE直接引用正在修改的表。额外的子查询具体化了表并允许代码工作 很多人会用JOIN来写这个: 这是MySQL中的黑客攻击。M

我遇到了一个来自Leetcode的问题

一种方法如下:

从某人处删除 Id不在SELECT MINp中。Id来自SELECT*FROM Person p 通过电子邮件分组


我想知道为什么它需要表本身的子查询从SELECT*FROM Person中选择MINp.Id,而不是从Person p中选择MINp.Id这是MySQL中的一个漏洞。MySQL不允许DELETE或UPDATE直接引用正在修改的表。额外的子查询具体化了表并允许代码工作

很多人会用JOIN来写这个:


这是MySQL中的黑客攻击。MySQL不允许DELETE或UPDATE直接引用正在修改的表。额外的子查询具体化了表并允许代码工作

很多人会用JOIN来写这个:

DELETE p
    FROM Person p JOIN
         (SELECT p2.email, MIN(p2.ID) as min_id
          FROM person p2
          GROUP BY p2.email
         ) pp
         ON pp.email = p.email
    WHERE p.id > pp.id;