美文网首页mysql
MySQL出现You can‘t specify target

MySQL出现You can‘t specify target

作者: HachiLin | 来源:发表于2023-02-03 18:50 被阅读0次

1. 背景

由于当天的数据被昨天的数据污染了,需要删除数据,以保证当天的数据报表展示正确。以手机号为例子,每天会处理新增的手机号客户,但是不应该包含昨天的手机号客户数据。

2. 错误语句

DELETE 
FROM
    XXTable
WHERE
    import_code IN ( 'CODE1', 'CODE2', 'CODE3' ) 
    AND import_date = 20230202 
    AND mobile_no IN ( SELECT mobile_no FROM XXTable WHERE import_code IN ( 'CODE1', 'CODE2', 'CODE3' )  AND import_date = 20230201) 

执行sql会报错:

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

其含义是:不能在同一表中查询的数据作为同一表的更新数据

3. 正确语句

既然不能在同一表中的查询数据作为更新数据源,那么只能通过临时表的方式去做更新即可。

DELETE 
FROM
    XXTable
WHERE
    import_code IN ( 'CODE1', 'CODE2', 'CODE3' ) 
    AND import_date = 20230202 
    AND mobile_no IN ( SELECT BR. mobile_no FROM (SELECT TR. mobile_no FROM XXTable AS TR WHERE import_code IN ( 'CODE1', 'CODE2', 'CODE3' )  AND import_date = 20230201) AS BR)

4. 参考链接

相关文章

网友评论

    本文标题:MySQL出现You can‘t specify target

    本文链接:https://www.haomeiwen.com/subject/fiynhdtx.html