Hallo,
ich muss gerade eine Datenbankabfrage entwickeln, die mehrere Bit-Flag
(bzw. boolsche) Spalten prüft und frage mich ob das von mir entwickelte
Sql a) der Anforderung gerecht wird b) noch optimiert werden könnte.
Ein Objekt hat zwei Bit-Flags, die unabhängig voneinander true (1)
oder false (0) sein können, damit ergeben sich 4 mögliche Zustände
pro Datensatz:
1 1
1 0
0 1
0 0
Die Tabelle sieht entsprechend aus:
Id Payload Flag1 Flag2
----------------------------------------------
1 ... 1 0
2 ... 1 1
3 ... 0 0
Für die Ausgabe möchte ich eine Filtermöglichkeit für Werte der Tabelle
schaffen, indem ich den Benutzer Checkboxen anklicken lasse
[ ] Elemente mit Flag 1 gesetzt
[ ] Elemente mit Flag 2 gesetzt
[ ] alle anderen Elemente (beide Flags sind 0)
Ich habe die Datenbankabfrage wie folgt abgebildet:
DECLARE @varFlag1 bit, @varFlag2 bit, @varOthers bit
SELECT [Id], [Payload]
FROM [tabelle1]
WHERE (([Flag1] | [Flag2]) & @varOthers) = @varOthers
AND ([Flag1] & @varFlag1) = @varFlag1
AND ([Flag1] & @varFlag2) = @varFlag2
Das scheint aber irgendwie zu überkandidelt in Hinblick auf die
Verwendung so vieler Bit-Operatoren (| und &).
Tests an Beispieldaten haben zunächst immer das gewünschte Ergebnis
gebracht (was aber nichts heißen muss ;)) Aber könnte man dies auch
evt. eleganter lösen? Wäre sehr erfreut, wenn da jemand mal seinen
Schweif drüberblicken lassen könnte.
Danke und Ciao bis später,
Frank