如何在查询中进行逻辑排除?

how to make a logical exclusion within the query?

我在我们的 ERP 数据库中有 3 个 table 保存所有交货数据(table 文档为每个交货单保留一行,documentpos 保存交货单上的所有位置,documentserialnumbers 保存交付项目的所有序列号)。 我想显示所有已交付给客户且至今仍保留在那里的带有序列号的物品。 然而,上面显示的以下查询的输出显示,已交付的一件商品稍后被 returned(红色标记)。 return 交货单的文件编号为 527419(深红色标记),指的是黄色列出的交货单 319821(绿色)。 正确的列表将因此只显示仍在客户网站上的项目,而不显示 returned 项目(见下文)。 如何更改查询才能从输出中排除 returned 项?

图中上方的 table 显示了我的查询输出,下面的 table 应该是这样。

select a.BelID, c.ReferenzBelID, a.itemnumber, a.itemname, c.deliverynotenumber,c.documenttype, c.documentmark, b.serialnumber
from dbo.documentpos a 
inner join dbo.documentserialnumbers b on a.BelPosID = b.BelPosID 
inner join dbo.documents c on a.BelID = c.BelID 
inner join sysdba.customers d on d.account = c.A0Name1
where  d.AccountID = 'customername' and c.documenttype like '%delivery%'  
order by a.BelID

您可以排除由任何 "return" 送货单引用的职位,就像这样(已编辑)

select a.BelID, c.ReferenzBelID, a.itemnumber, a.itemname, c.deliverynotenumber,c.documenttype, c.documentmark, b.serialnumber
from dbo.documentpos a 
inner join dbo.documentserialnumbers b on a.BelPosID = b.BelPosID 
inner join dbo.documents c on a.BelID = c.BelID 
inner join sysdba.customers d on d.account = c.A0Name1
where  d.AccountID = 'customername' and c.documenttype like '%delivery%'
and not exists (select 1 
                from dbo.documents cc
                where cc.documenttype like '%delivery%' 
                and c.ReferenzBelID=cc.BelID
                and c.documentmark='VLR')
and not exists (select 1
                from dbo.documents ccc
                join dbo.documentpos aa on aa.BelID = ccc.BelID 
                where ccc.ReferenzBelID=c.BelID
                and ccc.documentmark='VLR'
                and a.itemnumber=aa.itemnumber)
order by a.BelID