MySQL查询何处包含CASE或IF?

MySQL查询何处包含CASE或IF?,mysql,case,where,Mysql,Case,Where,奇怪的问题 我的问题看起来像 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"

奇怪的问题

我的问题看起来像

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
显然MySQL返回了一个错误的行数,我认为我的问题在于WHERE的逻辑。。。案例陈述。也许用括号?也许我应该选择操作员
,而不是
?当我只比较一个字段时,我的第二个
是否也应该包括括号?我应该使用
IF
而不是
CASE

基本上,如果字段
foo
bar

我会全力以赴,但完成这个查询需要花费大量时间…:(

编辑:只是为了注释,我的问题是,我忘记了我的
案例中的
ELSE

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

此解决方案也有效,但发布的解决方案更好…

您应该在此处使用或而不是CASE:

WHERE
(`t1`.`field` = "foo" AND `t1`.`anOtherField` != 123 AND `t1`.`anOtherField` != 456 AND `t1`.`anOtherOtherField` != "some String")
OR
(`t1`.`field` = "bar" AND `t1`.`aSecondOtherField` != 12345)

哦,天哪,你说的对,我真是个傻瓜。哈哈。我显然设计得太多了,我确信这不可能那么容易,因此我甚至没有完全考虑过这个解决方案。可能是在你编写一个长达一页的查询时发生的。这个问题与下面的解决方案不同。否则为真->或(t1.field不在('foo','bar'))是的,我知道。我忘了提到,
t1
字段
可以是空字符串(在这种情况下,不应返回任何行),也可以是除“foo”或“bar”以外的其他字符串(在这种情况下,应返回行(+应修改某些其他字段,这是一个复杂的qry))。因此,我修改了您的解决方案以满足我的需要。