You can‘t specify target table ‘Person‘ for update in FROM clause

刷sql题的时候出了这么个问题
输入: 
Person 表:
+----+------------------+
| id | email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]  |
| 3  | [email protected] |
+----+------------------+
输出: 
+----+------------------+
| id | email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]  |
+----+------------------+
解释: [email protected]重复两次。我们保留最小的Id = 1。

编写一个 SQL 删除语句删除 所有重复的电子邮件,只保留一个id最小的唯一电子邮件。

任意顺序 返回结果表。 (注意: 仅需要写删除语句,将自动对剩余结果进行查询)

DELETE

FROM

  Person

WHERE

  id NOT IN (SELECT min( id ) FROM Person  GROUP BY email )

会报错

You can't specify target table 'Person' for update in FROM clause

查了一下更新表的时候

You can't specify target table '表名' for update in FROM clause这样的错误,它的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值。

要经典加一层 select

DELETE

FROM

  Person

WHERE

  id NOT IN (SELECT * FROM ( SELECT min( id ) FROM Person GROUP BY email ) t)

猜你喜欢

转载自blog.csdn.net/qq_43433185/article/details/130794274