SQL Stichwort Filter Abfrage



  • Access 2003

    Hallo zusammen,

    ich habe ein Problem mit einer Abfrage.
    In der Tabelle Bilder befinden sich Bilder (wie der Name schon sagt),
    diese sind einer Gruppe zugeordnet. Der Gruppe sind wiederum Stichwörter zugeordnet.
    Ich möchte eine Select Abrage stellen die alle Bilder zurückgibt die z.B.
    Stichwort1 und Stuchwort2 aus der Tabbele Stichwoeter haben.

    Tabelle1: Bilder
    ID
    GruppenID (n -> 1 Beziehung zu Gruppen.ID)
    Datum
    Bezeichnung
    Foto

    Tabelle2: Gruppen
    ID
    Bezeichnung

    Tabelle3: GruppenStichwort
    GruppenID (n -> 1 Beziehung zu Gruppen.ID)
    StichwortID (n -> 1 Beziehung zu Stichwoerterr.ID)

    Tabelle4: Stichwoerter
    ID
    Stichwort

    Mein ansatz dazu ist

    SELECT Bilder.ID, Bilder.GruppenID, Bilder.Datum, Bilder.Bezeichnung
    FROM Stichwoerter INNER JOIN ((Gruppen INNER JOIN Bilder
    ON Gruppen.ID = Bilder.GruppenID) INNER JOIN GruppenStichwoerter ON Gruppen.ID = GruppenStichwoerter.GruppenID) ON
    Stichwoerter.ID = GruppenStichwoerter.StichwoerterID
    WHERE (((Stichwoerter.Stichwort)=\"Stichwort1\")) )
    
    INTERSECT
    
    SELECT Bilder.ID, Bilder.GruppenID, Bilder.Datum, Bilder.Bezeichnung
    FROM Stichwoerter INNER JOIN ((Gruppen INNER JOIN Bilder
    ON Gruppen.ID = Bilder.GruppenID) INNER JOIN GruppenStichwoerter ON Gruppen.ID = GruppenStichwoerter.GruppenID) ON
    Stichwoerter.ID = GruppenStichwoerter.StichwoerterID
    WHERE (((Stichwoerter.Stichwort)=\"Stichwort2\")) )
    

    Leider Unterstützt Access INTERSECT nicht.
    Kennt jemand eine andere Lösung?



  • Warum machst Du keine OR-Bedingung?

    WHERE ((Suchwort = "blablabla") OR (Suchwort = "Blubb"))
    

    Grüße Joe_M.



  • Weil als Ergebnis nur die Datensätze geliefert werden sollen, dennen das Stichwort "blablabla" und "Blubb" zugeordnet worden ist.
    Und nicht die Datensätze die z.B. nur "blablabla" haben.



  • Da fällt mir auf Anhieb nur so etwas ein:

    SELECT Bilder.Bezeichnung, Bilder.ID
    FROM ...
    WHERE ((Stichwort = "blablabla") OR (Stichwort = "Blubb"))
    GROUP BY Bilder.Bezeichnung, Bilder.ID
    HAVING count(Stichwort)=2
    

    (mit dem "GROUP BY" werden alle Einträge zu einem Bild zusammengruppiert und mit "HAVING" wird alles rausgeschmissen, was weniger als 2 Stichwörter hat)



  • Ja das ist es.
    Danke dafür :D, Problem endlich gelöst.


Anmelden zum Antworten