
最近遇到一个笔试题,通过一些子表的条件来删除主表数据,类似这种
DELETE P FROM Product P LEFT JOIN OrderItem I ON P.Id = I.ProductId WHERE I.Id IS NULL 工作中一直都是代码操作单表,然后加事务, 像上面这个 sql ,一般先查出 P 表 id 再根据 id 删除, 想知道 v 友们是什么情况?
1 lyusantu 2024-07-03 08:50:17 +08:00 这不是让你减少一次查询嘛 正常来说的话 I 表的 ID 应是主键 也不存在为 null 的情况吧 |
2 Nitsuya 2024-07-03 15:02:20 +08:00 I 表会卡全表. 看业务和数据. |
3 onll42y 2024-07-03 15:48:00 +08:00 这个 SQL 是说把没有产生过订单的商品全部删除,用代码单表查的话,实现费事一点,执行效率也没这个高 |
4 andykuen959595 2024-07-03 16:53:53 +08:00 这种也可以的,实在是不放心,可以先过滤出来,然后插入临时表,最后再删除。估计保险吧 |