mysql

MySQL出现You can‘t specify target

2023-02-03  本文已影响0人  HachiLin

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. 参考链接

上一篇下一篇

猜你喜欢

热点阅读