目标表和原表一致 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字段条件,如果添加反而会出错)