访问 sql 查询以查看包中是否包含某些物品

Access sql query to see if a bag has certain items

我有两个 table 包和物品。

包 table 包含包的元数据。 item table 包含包中有哪些物品以及该物品的数量。

我想看看能不能找到任何装有笔记本电脑和 tablet 的包。作为参考,我有 ItemType 这是物品名称,BagID 是包 ID:

SELECT Item.BagID, Item.ItemType
FROM 
  Bag INNER JOIN 
  Item ON Bag.BagID = Item.BagID
WHERE ItemType = 'Tablet' AND ItemType = 'Laptop';

我试过了,但因为那不是 table 的工作方式,所以这个查询不会工作。

如有任何帮助,我们将不胜感激。

您可以尝试使用两个 EXISTS 子句进行查询:

SELECT * FROM Bag b
WHERE 
  EXISTS (SELECT * FROM Item i
          WHERE ItemType = 'Tablet' AND b.BagID = i.BagID)
  AND EXISTS (SELECT * FROM Item i 
              WHERE ItemType = 'Laptop' AND b.BagID = i.BagID)

或者,您可以将 Bag 加入 Item table 两次:

SELECT * 
 FROM 
  Bag b INNER JOIN 
   item laptop ON laptop.ItemType = 'Laptop' AND laptop .BagID = b.BagID INNER JOIN
   item tablet ON tablet.ItemType = 'Tablet' AND tablet .BagID = b.BagID;

第一个查询将 return 每个袋子一行,其中 tablets 和笔记本电脑,而第二个查询可能 return 多行,如果你有不止一排笔记本电脑 and/or table它是一个包的物品。

我喜欢使用 group byhaving 来处理这些类型的查询。在 MS Access 中,这看起来像:

SELECT Item.BagID
FROM Bag INNER JOIN
     Item
     ON Bag.BagID = Item.BagID
WHERE ItemType IN ('Tablet', 'Laptop')
GROUP BY Item.BagID
HAVING COUNT(Item.BagId) = 2;

注意:这里假设同时有两件物品不在包中。