Seltsames Problem.
Meine Abfrage sieht wie folgt aus
SELECT DISTINCT ID, `etcetc`, `if/elses over muliple joined tables` FROM
table1 AS `t1`
# some joins, eventually unrelated in that context
WHERE
# some standard where statements, they work/
CASE
WHEN `t1`.`field` = "foo" THEN (`t1`.`anOtherField` != 123 AND `t1`.`anOtherField` != 456 AND `t1`.`anOtherOtherField` != "some String")
WHEN `t1`.`field` = "bar" THEN `t1`.`aSecondOtherField` != 12345
END
#ORDER BY CASE etc. Standard Stuff
Offenbar gibt MySQL eine falsche Zeilenzahl zurück, und ich denke, mein Problem liegt in der Logik der WHERE ... CASE-Anweisung. Vielleicht mit den Klammern? Vielleicht sollte ich mich für den Operator OR
und nicht AND
? Sollte meine zweite WHEN
auch Klammern einschließen, auch wenn ich nur ein Feld vergleiche? Sollte ich verwenden IF
und nicht CASE
?
Grundsätzlich möchte ich einige Zeilen mit bestimmten Werten ausschließen, wenn es einen bestimmten Wert im Feld foo
o bar
Ich würde das alles ausprobieren, aber es dauert sehr lange, bis die Abfrage abgeschlossen ist... :(
Edit: Nur für die Notizen, mein Problem war, dass ich die ELSE
in meinem CASE
.
CASE
WHEN `t1`.`field` = "foo" THEN (`t1`.`anOtherField` != 123 AND `t1`.`anOtherField` != 456 AND `t1`.`anOtherOtherField` != "some String")
WHEN `t1`.`field` = "bar" THEN (`t1`.`aSecondOtherField` != 12345)
ELSE TRUE
END
Diese Lösung funktioniert auch, aber die gepostete Lösung ist besser...