访问sql查询以查看包是否有某些项目

时间:2015-08-25 11:50:39

标签: sql ms-access-2013

我有两张桌子包和物品。

行李表包含行李的元数据。项目表包括包中的物品和物品的数量。

我想知道我是否能找到任何有笔记本电脑和平板电脑的包。作为参考,我有<a href="{{ path('productsAction') ~ '/#' ~ product.slug }}">Apple</a>这是项目名称,ItemType是行李ID:

BagID

我尝试了这个但是因为那不是表如何工作这个查询不会工作。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用两个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表两次:

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;

第一个查询将在每个行李中返回一行,其中包含平板电脑和笔记本电脑,而如果您有多行笔记本电脑和/或平板电脑,则第二个查询可能会返回多行。

答案 1 :(得分:0)

我喜欢使用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;

注意:这假设同时包含两件物品。