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

SQL Server如何基于stock关联表删除items和box两张表的对应行

问题解决逻辑

首先你之前的查询逻辑存在错误,box.boxof not in (select ORDERNO from items) 这个条件不符合关联需求:你需要匹配的是box表的ORDERNO属于待删除items条目的ORDERNO,而非找boxof不在items表范围内的记录。

步骤1:先筛选待删除的box表数据(验证结果用)

使用关联查询匹配规则,加DISTINCT避免同一个ORDERNO对应多条items记录时重复返回box行:

SELECT DISTINCT
    box.BOX_ID, box.ORDERNO, box.BOX, box.BOXOF, box.LU_ON
FROM box
INNER JOIN items ON box.ORDERNO = items.ORDERNO
INNER JOIN stock ON items.ITEM = stock.NUMBER
WHERE
    items.LU_ON >= '2021-11-10'
    AND CONVERT(VARCHAR, stock.CUSTOMTEXT) = 'breakout'
    AND CONVERT(VARCHAR, items.ORDERNO) <> ''

确认返回的是你要删除的box条目后再执行删除操作。

步骤2:按顺序执行删除

注意必须先删box表数据,再删items表数据:如果先删除items,就无法通过关联关系筛选对应的box记录了

删除box表目标数据

DELETE FROM box
WHERE BOX_ID IN (
    SELECT DISTINCT box.BOX_ID
    FROM box
    INNER JOIN items ON box.ORDERNO = items.ORDERNO
    INNER JOIN stock ON items.ITEM = stock.NUMBER
    WHERE
        items.LU_ON >= '2021-11-10'
        AND CONVERT(VARCHAR, stock.CUSTOMTEXT) = 'breakout'
        AND CONVERT(VARCHAR, items.ORDERNO) <> ''
)

删除items表目标数据

执行你原有的items删除语句即可:

DELETE FROM items
WHERE items.item in (
    SELECT stock.number 
    FROM stock 
    WHERE 
        items.item = stock.NUMBER 
        AND items.LU_ON >= '2021-11-10' 
        AND CONVERT(VARCHAR, ORDERNO) <> '' 
        AND CONVERT(VARCHAR, STOCK.CUSTOMTEXT) = 'breakout'
)

注意事项

生产环境操作前建议先备份对应表数据,或开启事务执行删除,确认影响行数符合预期后再提交事务,避免误删数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:15:04