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字段条件,如果添加反而会出错)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值