3

奇怪的问题。

我的查询看起来像

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 ... CASE 语句的逻辑。也许用括号?也许我应该去找运营商OR而不是ANDWHEN即使我只比较一个字段,我的第二个也应该包括括号吗?我应该使用IF而不是CASE吗?

基本上我想排除一些具有特定值的行,如果字段中有特定值foobar

我会全力以赴,但完成该查询需要大量时间...... :(

编辑:只是为了笔记,我的问题是,我忘记了ELSE我的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

该解决方案也有效,但发布的更好......

4

1 回答 1

6

您应该在此处使用 OR 而不是 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)
于 2010-04-15T09:17:14.640 回答