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

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

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

实例:

子查询:

SELECT product_id from t_product_specification_value as tps WHERE
NOT 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 WHERE
NOT 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字段条件,如果添加反而会出错)

你可能感兴趣的:(mysql)