Datenbank-Abfrage(ausschlussverfahren)



  • Hallo,

    ich versuche mich gerade an einem programm wie z.B. http://de.akinator.com/
    Habe mir überlegt, dass es eigentlich (erst einmal grob) folgendermassen funktionieren sollte:

    Personen-Tabelle (ID, PersonName)
    1, Isaac Newton
    2, Bill gates

    Eigenschaften (ID, EigenschaftName)
    1001, "ist Engländer"
    1002, "ist Amerikaner"
    1003, "ist Physiker"

    Zuweisungen (PersonenID, EigenschaftenID, Wert)
    1, 1001, 1
    2, 1001, 0
    1, 1002, 0
    2, 1002, 1
    1, 1003, 1

    Mein Problem ist, dass ich nun ein SQL-Statement erstellen muss, dass aus der Tabelle "Zuweisungen" alle "Gültigen" PersonenIDs zurückliefert ( in Bezug auf bereits beantwortete Fragen)
    z.B. hat der User geantowrtet:
    1001(ist Engländer) => 1 (true)
    1003(ist Physiker) => 0 (false)

    Wenn ich die beiden antworten mittels AND verknüpfe
    Select Distinct PersonenID from zuweisungen where
    EigenschaftenID=1001 AND Wert = 1
    AND
    EigenschaftenID=1003 AND Wert = 0

    kommt natürlich kein Datensatz raus, da EigenschaftenID nicht 1001 UND 1003 (gleichzeitig) sein kann.
    Mittels ODER-Verknüpfung bekomme ich aber ungültige(zuviele) datensätze zurück, da die verschiedenen Antworten sich ja immer weiter einschränken müssen (also so gesehehn AND-verknpüft)

    Irgendwie muss ich das anders lösen, habe aber keine Idee, wie.

    hat jemand einen Hinweis ?



  • Welches Datenbanksystem verwendest Du? Es gibt verschiedene Lösungen.

    Um beispielsweise alle Amerikaner zu finden die keine Physiker sind könnte man anfragen:

    SELECT PersonenID FROM Zuweisungen WHERE EigenschaftenID=1002
    EXCEPT
    SELECT PersonenID FROM Zuweisungen WHERE EigenschaftenID=1003

    Die Wert-Spalte kannst du dir dabei klemmen. Trag einfach nur die Treffer (Wert=1) ein.


Anmelden zum Antworten