WHERE: von mehreren Aussagen darf nur eine wahr sein
Thomaier
- datenbank
Hallo,
ich möchte gerne in meiner WHERE-Klausel verschiedene Aussagen haben, von denen aber nur eine wahr sein darf. Für sich einzeln wahr wären in diesem Fall z.B.
table.eins = 1
table.zwei = 2
table.drei = 3
WHERE soll insgesamt nur wahr sein, wenn ausschließlich EINE der Einzelaussagen wahr ist. Für oben beschriebene Vergleiche könnte das ganze noch anhand aller möglichen Kombinationen beschrieben werden:
WHERE (table.eins = 1 AND table.zwei != 2 AND table.drei != 3) OR (table.eins != 1 AND table.zwei = 2 AND table.drei != 3)
OR (table.eins != 1 AND table.zwei != 2 AND table.drei = 3)
Wären es nur 3 Werte, würde ich es so machen, da es aber deutlich über ein Dutzend sein können bei mehreren hunderttausenden Datensätzen, wäre mir die einzelne Überprüfung aller möglichen Kombinationen zu aufwendig.
Wie kann die Abfrage optimiert werden?
Danke,
Thomaier
In MS-SQL würd ich sowas machen:
WHERE ( (CASE WHEN table.eins = 1 THEN 1 ELSE 0 END) +
(CASE WHEN table.zwei = 2 THEN 1 ELSE 0 END) +
(CASE WHEN table.drei = 3 THEN 1 ELSE 0 END) = 1)
Vielleicht findest du eine Umsetzug davon für deine DB.
Hallo Encoder,
danke für die schnelle Antwort. Ich nutze MySQL 5 und es scheint mit IF zu funktionieren
WHERE ( (IF table.eins = 1, 1, 0) +
(IF table.zwei = 2, 1, 0) +
(IF table.drei = 3, 1, 0) = 1)
Thomaier
Moin!
ich möchte gerne in meiner WHERE-Klausel verschiedene Aussagen haben, von denen aber nur eine wahr sein darf.
Du suchst XOR als logische Verknüpfung.
- Sven Rautenberg
echo $begrüßung;
» ich möchte gerne in meiner WHERE-Klausel verschiedene Aussagen haben, von denen aber nur eine wahr sein darf.
Du suchst XOR als logische Verknüpfung.
Wie XORt man denn mehr als zwei Parameter?
echo "$verabschiedung $name";
Moin!
»» » ich möchte gerne in meiner WHERE-Klausel verschiedene Aussagen haben, von denen aber nur eine wahr sein darf.
»» Du suchst XOR als logische Verknüpfung.Wie XORt man denn mehr als zwei Parameter?
Wie ANDet oder ORt man denn mehr als zwei Parameter? :)
- Sven Rautenberg
Hallo Sven,
»» » ich möchte gerne in meiner WHERE-Klausel verschiedene Aussagen haben, von denen aber nur eine wahr sein darf.
»» Du suchst XOR als logische Verknüpfung.Wie XORt man denn mehr als zwei Parameter?
Wie ANDet oder ORt man denn mehr als zwei Parameter? :)
Nix für ungut: Wenn Du Dir eine Wahrheitstabelle für A xor B xor C aufstellst wirst Du sehen, dass das nicht äquivalent zur Aussage "nur 1 von A, B oder C" ist.
Viele Grüße,
Christian
Moin!
Hallo Sven,
»» Wie ANDet oder ORt man denn mehr als zwei Parameter? :)
Nix für ungut: Wenn Du Dir eine Wahrheitstabelle für A xor B xor C aufstellst wirst Du sehen, dass das nicht äquivalent zur Aussage "nur 1 von A, B oder C" ist.
Ja, so ein Mist! :) Denkfehler.
- Sven Rautenberg