Requête MySQL OÙ, y Compris le CAS ou SI?

Problème étrange.

Ma Requête ressemble

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

Apperantly MySQL retourne une mauvaise rowcount et je pense que mon problème est dans la logique de la ... de CAS. Peut-être avec les crochets? Je devrais peut-être aller de l'opérateur OR et pas AND? Mon deuxième WHEN comprenant des crochets en outre, même lorsque je ne comparer un champ? Dois-je utiliser IF et pas CASE?

Fondamentalement, je veux exclure certaines lignes avec des valeurs spécifiques SI theres une valeur spécifique dans le champ foo ou bar

Je voudrais essayer, mais il faut une énorme quantité de temps pour terminer cette requête... 🙁

Edit: Juste pour les notes, mon problème, c'est que j'ai oublié le ELSE dans mon 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

Cette solution fonctionne également, mais de la a affiché l'un est mieux...

Ce n'est pas la même que la solution ci-dessous. D'AUTRE VRAI -> OU (t1.champ pas dans ('foo', 'bar'))
Oui, je sais. J'ai oublié de mentionner, qu' t1.field soit peut être une chaîne vide (dans ce cas pas de ligne doit être retourné) ou une autre chaîne que " foo " ou " bar " (dans ce cas, la ligne doit être retourné (+ quelques autres champ doit être modifié, c'est un complexe req)). Donc j'ai modifié votre solution pour l'adapter à mes besoins.

OriginalL'auteur handfix | 2010-04-15