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))。因此,我修改了您的解决方案以满足我的需要。