首页 > 解决方案 > 如何基于SQL Server中的一张表删除两张表中的一行/多行

问题描述

我有两个需要删除的表(为了方便起见,我将在这里复制所有内容)。

要删除的主表是基于另一个表完成的,我可以这样做如下

select 
    items.item, items.ORDERNO, items.LU_ON, 
    stock.NUMBER, stock.CUSTOMTEXT, stock.LU_ON
from 
    items, stock
where 
    items.item = stock.NUMBER 
    and items.LU_ON >= '2021-11-10' 
    and convert(VARCHAR, STOCK.CUSTOMTEXT) = 'breakout' 
    and convert(VARCHAR, ORDERNO) <> '' 

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')

但是,为了在不接触前端程序的情况下完全在 SQL 中工作,我还需要根据在项目表。下面是项目表中的一些列/行,我需要删除第一个项目,这是基于该项目位于“库存”表中,该表具有项目表中的“项目”,就在库存表中item' 是 'number' ,只要 lu_on 列(在 stock 和 items 表中)有我输入的日期,并且在 'customtext' 列中还有单词 'breakout',我就会从 items 表中删除从股票表。

ORDERNO    ITEM_ID   ITEM
-------------------------------
1225971    4208453   HRE-IK.S
1225971    4208454   HRE-IK.B1
1225971    4208455   HRE-IK.B2

下面是“框”表的主要列,我需要删除受我在项目表中删除它影响的行(这是我卡住的部分)

BOX_ID    ORDERNO   BOX   BOXOF
-------------------------------
1027766   1225971    1      1
1027767   1225971    1      2
1027768   1225971    2      2

下面是我试图找到正确项目的查询,这个查询要么没有显示结果,要么显示太多我不需要的结果(因为我试图只按日期排序)

select 
    items.item, items.ORDERNO, items.LU_ON, 
    stock.NUMBER, stock.CUSTOMTEXT, stock.LU_ON,
    box.orderno, box.LU_ON, box.BOX_ID, box.box
from 
    BOX, items, STOCK
where 
    box.boxof not in (select ORDERNO from items) 
    and items.item = stock.NUMBER 
    and box.LU_ON >= '2021-11-10' 
    and items.LU_ON >= '2021-11-10' 
    and convert(VARCHAR, STOCK.CUSTOMTEXT) = 'breakout' 
    and convert(VARCHAR, items.ORDERNO) <> '' 

因此,出现了太多信息,不知道如何隔离我正在寻找的内容,一旦我知道它是正确的,我将需要删除我找到的内容。

我希望我的问题足够清楚,这是我第一次在这里提问,并且很乐意澄清/接受指点。

谢谢!

标签: sql-server

解决方案


推荐阅读