You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过关联查询结果删除product_inventory表中的无效数据

删除product_inventory无效关联记录的实现方案

方案1:基于现有右连接逻辑直接改造(最贴合你已验证的查询逻辑)

你可以直接把之前的SELECT查询改写成多表DELETE语句,直接匹配到所有product.id为NULL的库存记录并删除:

DELETE product_inventory
FROM product
RIGHT JOIN product_inventory 
    ON product.id = product_inventory.product_id
WHERE product.id IS NULL;

方案2:NOT EXISTS通用写法(兼容性更强,适配绝大多数关系型数据库)

如果你使用的数据库对多表DELETE语法支持有限,可以用更通用的NOT EXISTS写法:

DELETE FROM product_inventory pi
WHERE NOT EXISTS (
    SELECT 1 
    FROM product p 
    WHERE p.id = pi.product_id
);

大数据量分批删除优化(适用于数十万级数据避免锁表)

如果数据量较大,一次性删除可能导致表锁影响正常业务,可以分批删除,以下是MySQL下的分批执行示例:

-- 循环分批删除,每次删1000条,直到没有符合条件的记录为止
WHILE ROW_COUNT() > 0 DO
    DELETE FROM product_inventory pi
    WHERE NOT EXISTS (
        SELECT 1 FROM product p WHERE p.id = pi.product_id
    ) LIMIT 1000;
END WHILE;

注意事项

  • 执行删除操作前,务必先备份全量product_inventory表,避免误删数据无法恢复
  • 可先执行对应逻辑的SELECT COUNT(*)语句,确认待删除的记录数符合预期后再执行删除
  • 尽量选择业务低峰期执行操作,减少对在线业务的影响

内容的提问来源于stack exchange,提问作者Github Copilot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:39:01