sql - MS-ACCESS / SQL - 如何在多个条件下应用 where 子句
问题描述
SELECT Stock.*
FROM Stock
WHERE (
(
(Stock.ComputerPartNumber) In (SELECT [ComputerPartNumber] FROM [Stock] As Tmp GROUP BY [ComputerPartNumber] HAVING Count(*)=2)
)
AND
(
(Stock.EquipmentName)="EquipmentA" Or (Stock.EquipmentName)="EquipmentB")
)
OR (
(
(Stock.ComputerPartNumber) In (SELECT [ComputerPartNumber] FROM [Stock] As Tmp GROUP BY [ComputerPartNumber] HAVING Count(*)=1)
)
AND (
(Stock.EquipmentName)="EquipmentA" Or (Stock.EquipmentName)="EquipmentB"
)
);
我正在使用上面的 SQL 来实现以下 3 项:-
- 找出仅由 EquipmentA 和/或 EquipmentB 使用的所有 ComputerPartNumber
- 如果ComputerPartNumber被EquipmentA和EquipmentB以外的设备使用,则过滤掉查询结果。
- 如果 EquipmentA 和 EquipmentC 都使用 ComputerPartNumber,则也过滤掉结果。
但是无法成功过滤出第 3 项。为了实现item3,我应该怎么做?附加了表和查询快照。提前致谢!
解决方案
您需要做的是检查一个部件在所有设备中使用的总次数是否等于设备 A 或 B 使用部件的总次数:
SELECT S.StorageID, S.ComputerPartNumber, S.EquipmentName, S.Result
FROM Stock AS S
WHERE
(SELECT COUNT(*) FROM Stock AS S1 WHERE S1.ComputerPartNumber=S.ComputerPartNumber)
=(SELECT COUNT(*) FROM Stock AS S2 WHERE S2.ComputerPartNumber=S.ComputerPartNumber AND S2.EquipmentName IN("EquipmentA","EquipmentB"))
问候,
推荐阅读
- java - 获取VariableElement的类名和包
- c - 当您动态分配内存时,“指针类型”有什么意义?
- scala - scala中的类型级别模式匹配
- c# - 模拟 Razor 页面单元测试的用户 ClaimsPrincipal
- javascript - Javascript 类作为对象的孩子
- go - 理解gometalinter的警告:conn可以是io.Reader/io.Writer
- ios - Swift 4,Segue 不传递数据
- html - 响应式导航栏 css
- java - 如何在java中获取不同范围内不同概率的随机数?
- android - 将 Firebase 集成的 android 应用推送到 github 是否不安全?