我使用这种查询:
SELECT element, Category FROM TableA, AllowedCategories
WHERE TableA.Category = AllowedCategories.Category
TableA的数据如下所示:
element Category
el1 Cat1
el2 Cat1
el3 Cat1
el4 Cat2
el5 Cat3
AllowedCategories是类别列表。只有在AllowedCategories中的TableA值必须在查询中显示。
它适用于第一个查询。它会过滤不在AllowedCategories表中的元素。但是,当我从这个子查询中执行子查询时,例如:
SELECT * FROM (
SELECT element, Category FROM TableA, AllowedCategories
WHERE TableA.Category = AllowedCategories.Category) As temp1
不再过滤类别。有什么问题,这个问题怎么能解决呢?
(文件扩展名为.mdb)
更新:我再次写了我的查询,但它在某种程度上有效。我仍然不知道是什么原因导致了这个问题,但我认为当查询子查询时,它并没有丢失它的过滤器。 MS-Access确实是一种非常奇怪的行为。用简单的
查询我的quurieSELECT * FROM subquery
给了我比我子查询中更多的记录。希望再次重写查询使其有效。
答案 0 :(得分:1)
您正在使用旧式编写查询。我建议使用显式的INNER JOIN语法:
SELECT element,
Category
FROM TableA
INNER JOIN AllowedCategories
ON TableA.Category = AllowedCategories.Category
或者:
SELECT element, category
FROM TableA
WHERE Category IN(SELECT Category FROM AllowedCategories)