簡體   English   中英

MS-ACCESS / SQL - 如何在多個條件下應用 where 子句

[英]MS-ACCESS / SQL - How to apply where clause in multiple conditions

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 項:-

  1. 找出僅由 EquipmentA 和/或 EquipmentB 使用的所有 ComputerPartNumber
  2. 如果ComputerPartNumber被EquipmentA和EquipmentB以外的設備使用,則過濾掉查詢結果。
  3. 如果 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"))

問候,

您可以使用not exists

select s.*
from stock as s
where not exists (select 1
                  from stock as s2
                  where s2.ComputerPartNumber = s.ComputerPartNumber and
                        s2.EquipmentName not in ("EquipmentA", "EquipmentB")
                 );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM