2017-01-13 1 views
0

abfragt verwende ich diese Art der Abfrage:Zugriff ignoriert INNER JOIN oder WHERE-Klausel in Unter

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

TableA Daten wie folgt aussieht:

element Category 
el1  Cat1 
el2  Cat1 
el3  Cat1 
el4  Cat2 
el5  Cat3 

AllowedCategories ist eine Liste der Kategorie. Nur Werte von TableA, die innerhalb von AllowedCategories liegen, müssen in der Abfrage angezeigt werden.

Es funktioniert gut für die erste Abfrage. Es filtert Elemente, die sich nicht in der Tabelle "AllowedCategories" befinden. Wenn ich jedoch eine Unterabfrage aus dieser herausstelle, zum Beispiel:

SELECT * FROM (
    SELECT element, Category FROM TableA, AllowedCategories 
    WHERE TableA.Category = AllowedCategories.Category) As temp1 

Kategorien werden nicht mehr gefiltert. Was ist falsch, wie kann dieses Problem umgangen werden?

(Dateierweiterung ist eine .mdb)

UPDATE: ich meine Abfrage wieder geschrieben, und es irgendwie funktioniert. Ich habe immer noch keine Ahnung, was dieses Problem verursacht haben könnte, aber ich habe mir gedacht, dass wenn eine Unterabfrage abgefragt wird, sie ihre Filter nicht verliert. Es ist in der Tat ein sehr seltsames Verhalten von MS-Access. Meine Queue mit einer einfachen

Abfrage erhielt ich mehr Datensätze als ich in meiner Unterabfrage hatte. Hoffentlich hat das erneute Schreiben der Abfrage es funktioniert.

Antwort

1

Sie verwenden einen älteren Schreibstil für Ihre Abfrage. Ich würde vorschlagen, die explizite INNER JOIN-Syntax:

SELECT element, 
     Category 
FROM TableA 
INNER JOIN AllowedCategories 
ON TableA.Category = AllowedCategories.Category 

Oder alternativ:

SELECT element, category 
FROM TableA 
WHERE Category IN(SELECT Category FROM AllowedCategories)