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...
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
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser OU ici au lieu de CAS:
OriginalL'auteur newtover