2017-01-13 5 views
0

を照会WHERE:アクセスINNER JOINを無視するか、サブで句は、私は、クエリのこの種を使用

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 

カテゴリはもうフィルタリングされません。何が間違っている、どのようにこの問題はarround働くことができますか?

(ファイルの拡張子は.MDBある)

UPDATE:私は再び私のクエリを書き、それが何らかの形で働いていました。私はまだこの問題を引き起こしていた可能性は考えていませんが、サブクエリがクエリされているときにフィルタを失っていないと思います。それは実際には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) 
関連する問題