这是场景。在此库存管理系统中,有项目。可以组合项目并制作组合项目。例如。显示器,系统单元,键盘,鼠标可以组成A1(组成项目)
当我将项目分配给Composed Item时,我使用了组合框来生成项目并选择项目。然后,我想将组合框的生成范围缩小到仅不在组合项目中的项目。 (例如,将鼠标m1分配给组成的项目A1。然后再次,我不想从组合框中看到它)我进行了以下不匹配的查询以过滤出项目。
SELECT Item.ITEMID, Item.SN, Item.TYPE, Item.BRAND,
Item.LOCATION, Item.COMMENCEDDATE, Item.CONDEMNDATE,
Type.TypeName
FROM Type INNER JOIN
(Item LEFT JOIN
ComposedIItem
ON Item.[ITEMID] = ComposedIItem.[ITEMID]
)
ON Type.TYPEID = Item.TYPE
WHERE (((ComposedIItem.ITEMID) Is Null) XOR
(((ComposedIItem.ITEMID) Is Not Null) AND
((ComposedIItem.DETACHEDDATE) Is Not Null))
);
当然,存在这样一种情况,即可以从合成项目中分离项目,然后再将其分配给合成项目。
在快照中,您可以找到我的工作方式。
在我将其从组合项目中分离出来并再次将其重新分配给另一项之前,该sql运行良好。然后,该项目仍会出现在组合框中。
有什么建议吗?
这里是数据集 https://imgur.com/a/EdRRbOx
答案 0 :(得分:0)
如果您要Items
不在任何个未组合的组合项目中,那么我在考虑not exists
:
select i.*, t.TypeName
from Item as i INNER JOIN
Type as t
on t.TYPEID = i.TYPE
where not exists (select 1
from ComposedIITem ci
where i.itemid = ci.itemid and
ci.detacheddate is null
);