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. 参考链接
- https://blog.csdn.net/qq_32727095/article/details/124492897
- https://blog.csdn.net/baidu_41553551/article/details/118178122?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-5-118178122-blog-124492897.pc_relevant_recovery_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-5-118178122-blog-124492897.pc_relevant_recovery_v2&utm_relevant_index=6
网友评论