MySQL中delete join 引发的危机

一开始是 执行查询操作,执行没问题,就改为删除操作

DELETE
FROM pay_recepit pr
JOIN fbank_account_notify fan ON fan.trade_no = pr.trade_no
WHERE pr.create_time >=str_to_date('2020-01-08 11:00:00','%Y-%m-%d %H:%i:%s')
  AND fan.is_ent_deposit = 'Y';

 啪,打脸了,执行不了,报错You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use

DELETE
FROM pay_recepit pr
JOIN fbank_account_notify fan ON fan.trade_no = pr.trade_no
WHERE pr.create_time &gt
> 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'pr
JOIN fbank_account_notify fan ON fan.trade_no = pr.trade_no
WHERE pr.create' at line 2
> 时间: 0.001s

放到navicat解释执行一下,果然失败了.因为有join,可能不知道选择哪个删除.

改为delete pr from ........执行一下果然不报错了. 所以 需要指定删除的表

DELETE pr
FROM pay_recepit pr
JOIN fbank_account_notify fan ON fan.trade_no = pr.trade_no
WHERE pr.create_time >=str_to_date('2020-01-08 11:00:00','%Y-%m-%d %H:%i:%s')
  AND fan.is_ent_deposit = 'Y';

另一个是,除了使用这个 join,还可以用 exists,但是这个SQL有坑.它只会执行前面一段后面的exists与前面的没关系

DELETE
FROM pay_recepit
WHERE create_time >'2020-01-08 11:00:00' 

DELETE
FROM pay_recepit
WHERE create_time >'2020-01-08 11:00:00'
  AND EXISTS
    (SELECT 1
     FROM fbank_account_notify fan
     WHERE fan.trade_no = trade_no
       AND fan.is_ent_deposit = 'Y') ;

正确的方式是像下面这样:需要指定别名

DELETE pr
FROM pay_recepit pr
WHERE pr.create_time >'2020-01-08 11:00:00'
  AND EXISTS
    (SELECT 1
     FROM fbank_account_notify fan
     WHERE fan.trade_no = pr.trade_no
       AND fan.is_ent_deposit = 'Y') ;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞翔的咩咩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值