2017-01-13 95 views
0

我使用這種查詢:Access將忽略INNER JOIN或WHERE子子句的查詢

SELECT element, Category FROM TableA, AllowedCategories 
WHERE TableA.Category = AllowedCategories.Category 

表A的數據是這樣的:

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的非常奇怪的行爲。用簡單的查詢我的queurie

SELECT * FROM subquery 

給我的記錄比我在子查詢中的還多。希望再次重寫查詢使其工作。

回答

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)