Можем ли мы исключить условия WHERE внутри предложения WHERE, где если условие не выполняется внутри него, то анализатор переходит к следующему условию sql? - PullRequest
1 голос
/ 14 апреля 2020

Я хотел бы, чтобы мой оператор sql оценивал все в условии WHERE и не останавливался, если условие не выполняется. Я вижу, что CASE WHEN останавливается, когда первый соответствующий оператор возвращает значение true.

Таким образом, как показано ниже, вычисляется только часть THEN, если выполняется наше условие WHEN, и не останавливается, если выполняется условие.

Есть ли способ сделать это?

SELECT m.* 
FROM users AS u 
JOIN microposts m ON u.id=m.user_id 
WHERE CASE WHEN #{my_string} != '' THEN u.gender = #{my_string} 
WHEN #{my_string2} != '' THEN u.hometown = #{my_string2} 
WHEN #{my_string3} != '' THEN m.content = #{my_string3} 
END

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Я думаю, что вы на самом деле ищете структуру AND/OR, где все условия AND объединены вместе, но мы используем OR #{my_string} == '' для обхода условия, когда строка не указана:

SELECT m.* 
FROM users AS u 
JOIN microposts m ON u.id=m.user_id 
WHERE ( #{my_string}  = '' OR u.gender   = #{my_string} )
  AND ( #{my_string2} = '' OR u.hometown = #{my_string2} )
  AND ( #{my_string3} = '' OR m.content  = #{my_string3} )
0 голосов
/ 14 апреля 2020

Как насчет:

SELECT m.* 
FROM users AS u 
JOIN microposts m ON u.id=m.user_id 
WHERE ( #{my_string} != '' AND u.gender = #{my_string} )
OR ( #{my_string2} != '' AND u.hometown = #{my_string2} )
OR ( #{my_string3} != '' AND m.content = #{my_string3} )

Здесь будут найдены записи, в которых выполняется любое из трех условий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...