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 gatesEigenschaften (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, 1Mein 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 = 0kommt 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=1003Die Wert-Spalte kannst du dir dabei klemmen. Trag einfach nur die Treffer (Wert=1) ein.