mysql在把子查询结果作为删除表中数据的条件,mysql不允许在子查询的同时删除原表数据

来源:互联网 发布:勇士队球员得分数据 编辑:程序博客网 时间:2024/04/29 09:24

目标表和原表一致  MYSQL不支持如此操作

我们的一般思路就是,1、把子查询的结果创建临时表存储。2、把这个临时表作为原表删除的条件。3、删除临时表。

实例:

子查询:

SELECT product_id from t_product_specification_value as tps WHERENOT EXISTS(SELECT id from t_product p WHERE p.id=tps.product_id ) AND NOT EXISTS(SELECT id from t_appr_product p WHERE p.id=tps.product_id)
根据子查询结果创建临时表tempid
create table tempid SELECT product_id from t_product_specification_value as tps WHERENOT EXISTS(SELECT id from t_product p WHERE p.id=tps.product_id ) AND NOT EXISTS(SELECT id from t_appr_product p WHERE p.id=tps.product_id)
把这临时表作为删除原表数据的条件

delete from t_product_specification_value where product_id in (select * from tempid)
删除临时表

drop table tempid

修正:可以直接使用如下语句:

DELETE from t_product_specification_value WHERE

NOT EXISTS(SELECT id from t_product p WHERE p.id=t_product_specification_value.product_id ) 
AND NOT EXISTS(SELECT id from t_appr_product p WHERE p.id=t_product_specification_value.product_id)

并且使用where not exists还可以优化性能(where后面不需要加product_id字段条件,如果添加反而会出错)

0 0