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

如何基于指定cp.id关联删除对应job_id下符合条件的lu表记录

问题原因分析

你写的SQL有两个核心问题:

  • 使用USING cp但没有加关联限制,会产生笛卡尔积,匹配到大量无关的cp记录,导致误删
  • 逻辑不全:没有先通过输入的cp.id拿到对应的job_id,也没有筛选出该job_id下的所有cp记录,关联链路是断的

正确实现SQL

版本1:完全匹配需求描述(同job_id下所有cp对应的lu记录,输入cp.id=1时删除6条)

DELETE FROM lu
WHERE EXISTS (
    SELECT 1
    -- 先拿到输入的cp记录对应的job_id
    FROM cp input_cp
    -- 关联拿到同job_id下的所有cp记录
    JOIN cp same_job_cp ON same_job_cp.job_id = input_cp.job_id
    -- 关联qr表拿到对应objectguid
    JOIN qr ON qr.checkpoint_id = same_job_cp.id
    -- 匹配lu的过滤条件
    WHERE input_cp.id = 1 -- 此处替换为你要输入的cp.id
      AND qr.objectguid = lu.objectguid
      AND same_job_cp.domain_id = lu.domain_id
);

版本2:匹配你给出的示例预期(输入cp.id=1时删除4条,额外限制domain_id和输入cp相同)

如果你预期仅删除和输入cp同job_id且同domain_id的lu记录,可以增加domain_id的匹配限制:

DELETE FROM lu
WHERE EXISTS (
    SELECT 1
    FROM cp input_cp
    JOIN cp same_job_cp ON same_job_cp.job_id = input_cp.job_id
    JOIN qr ON qr.checkpoint_id = same_job_cp.id
    WHERE input_cp.id = 1
      AND same_job_cp.domain_id = input_cp.domain_id -- 新增domain_id匹配限制
      AND qr.objectguid = lu.objectguid
      AND same_job_cp.domain_id = lu.domain_id
);

验证说明

拿你提供的测试数据测试版本2,输入cp.id=1时,会匹配到job_id=1且domain_id=1的cp记录id=1、2,对应qr的objectguid为637779d2-6d43-4639-b427-5323aa2a0111和637779d2-6d43-4639-b427-5323aa2a0211,对应lu表中正好4条记录,完全符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:36:03