Странный проблема.MySQL Query WHERE Включая CASE или IF?
Мой запрос выглядит
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 возвращает неправильную сверку, и я думаю, что моя проблема в логике утверждения WHERE ... CASE. Может быть, с помощью скобок? Может быть, я должен пойти за оператором OR
, а не AND
? Должен ли мой второй WHEN
включить скобки, даже когда я сравниваю только одно поле? Должен ли я использовать IF
, а не CASE
?
В основном я хочу, чтобы исключить некоторые строки с конкретными значениями, если Theres определенного значения в поле foo
или bar
Я хотел бы попробовать, что все, но это занимает огромное количество времени, чтобы выполнить этот запрос ... :(
Edit: Просто для заметок, моя проблема была, что я забыл 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
Это решение также работает, но отвечал один б. Etter ...
Это один не то же самое, используя раствор. ELSE TRUE -> OR (t1.field не в ('foo', 'bar')) – newtover
Да, я знаю. Я забыл упомянуть, что 't1'.'field' может быть пустой строкой (в этом случае строка не должна возвращаться) или какой-либо другой строкой, кроме« foo »или« bar »(в этом случае строка * должна * (+ некоторое другое поле должно быть изменено, его сложный qry)). Поэтому я изменил ваше решение, чтобы оно соответствовало моим потребностям. – handfix