2016-07-25 2 views
0

Я ищу способ выполнения проверки операторов MySQL, если данный параметр существует. Насколько я помню, я могу сделать следующее в Oracle для достижения этого:Проверка синтаксиса MySQL, если параметр равен нулю

select s.* from Site s 
where s.study = :study 
and (:enabled is null or s.enabled = :enabled) 

это что-то подобное в MySQL тоже? Тот же код выполняется без ошибок, но никогда не возвращает никаких записей.

Моя цель состоит в том, чтобы избежать использования нескольких lfs и elses в моем java-коде. Он должен работать так, что запрос выглядит, что, когда включен параметр является недействительным:

select s.* from Site s 
where s.study = :study 

и т.п., что если параметр не является нулевым:

select s.* from Site s 
where s.study = :study 
and s.enabled = :enabled 

, и я хочу сделать это с одним запрос

+0

'AND (s.enabled IS NULL ИЛИ s.enabled =: enabled)' –

+0

': enabled is null' довольно бессмысленно - вы можете тривиально проверить это в клиентском коде без использования db для этого, поскольку значение ': enabled' является одним из вас. вы хотите проверить, является ли поле в нулевом значении, что означает, что вам нужно проверить 's.enabled'. –

+0

Это не так бессмысленно, если вы предполагаете, что у вас всего один запрос для всех возможных случаев. Нет, если он и elses человек. Это очень полезно. Цель состоит в том, чтобы проверить параметр, а не колонку, и отключить целую строку в этом запросе, если параметр действительно равен нулю. – smoczyna

ответ

0

Я считаю, что это то, что вы спрашиваете:

SELECT s.* from Site s 
WHERE s.study = "some_study" 
AND (s.enabled IS NULL OR s.enabled = '' OR s.enabled = "enabled"); 
+0

Это не тот случай, моя цель - проверить, существует ли параметр, а не столбец. он должен избегать множественных ifs и еще в моем java-коде. В Oracle я могу это сделать и не забочусь о наличии этого значения. Фактически синтаксический анализатор SQL игнорирует строку, если параметр имеет значение null, поэтому он не влияет на запрос – smoczyna

+0

@smoczyna, возможно [это] (http://stackoverflow.com/questions/9855331/check-if-a-parameter-is-null -или-empty-in-a-хранимая-процедура) больше того, что вам нужно? – BrandonM

0

К сожалению, это сильно зависит от йа tabase. Мой первоначальный запрос работает при запуске в инструментах базы данных, но не обязательно, когда он запускается в JPA. Поэтому я должен закрыть этот вопрос, поскольку он не требует дополнительных ответов. Мне жаль, что я трачу ваше время.

Смежные вопросы