美文网首页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