如何在查询中进行逻辑排除?
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
我在我们的 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