Access忽略子查询中的INNER JOIN或WHERE子句

时间:2017-01-13 18:23:04

标签: sql ms-access

我使用这种查询:

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确实是一种非常奇怪的行为。用简单的

查询我的quurie
SELECT * FROM subquery

给了我比我子查询中更多的记录。希望再次重写查询使其有效。

1 个答案:

答案 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)