在MySQL中,写SQL语句的时候 ,可能会遇到 “You can’t specify target table ‘表名’ for update in FROM clause” 这样的错误,它的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值。
注意,这个问题只出现于mysql,mssql和Oracle不会出现此问题。
错误代码如下:
DELETE FROM
`Person`
WHERE
`Id` >= ALL( SELECT
p2.`Id`
FROM
`Person` p2
WHERE
`Email` = p2.`Email`
);解决方法:
创建临时表
DELETE FROM
`Person`
WHERE `Id` NOT IN
(
SELECT t.`Id`
#加上这个外层筛选可以避免You can't specify target table for update in FROM clause错误
FROM (
SELECT
#不加 " AS `Id` " 会有 “Unknown column 't.Id ' in 'field list'” 错误
MIN(`Id`) AS `Id`
FROM
`Person`
GROUP BY
`Email`
) t
)
;版权声明:本文为qq_44688635原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。