访问 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 by
和 having
来处理这些类型的查询。在 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;
注意:这里假设同时有两件物品不在包中。
我有两个 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 by
和 having
来处理这些类型的查询。在 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;
注意:这里假设同时有两件物品不在包中。