2016-06-24 2 views
-3

У меня есть SQL-запрос, в котором у меня есть client_id, User_id и имя, значения будут предоставлены из класса Java при вызове запроса. Сценарий здесь, если у меня есть client_id, тогда я должен рассматривать только client_id и не должен учитывать user_id и имя, если customer_id имеет значение null, тогда я должен учитывать user_id, и если идентификатор user_id равен null, я должен рассмотреть имя.Как реализовать if else в SQL?

Прямо сейчас эта логика реализована в выражении java if else. Я хочу, чтобы эта логика была перенесена непосредственно на SQL-запрос: следующий код:

String query = "SELECT * FROM CUSTOMER WHERE " 
if(customer!=null && customer.length!=0) 
     query = query+"AND CUSTOMER_ID LIKE '"+customer+"%'"; 
else if(user!=null && user.length!=0) 
     query = query+"AND USER_ID LIKE '"user+"%'"; 
else if(name!=0 && name.length!=0) 
     query = query + "AND NAME LIKE '"+name+"%'"; 
+1

Можете ли вы очистить свой mysql или sql-сервер? – SenthilPrabhu

+0

Вы используете JDBC? Или что-то еще? – Blank

ответ

0

Ваш построенный SQL имеет небольшой недостаток.

Условия условного предложения WHERE начинаются с И. Единственная проблема заключается в первых один, который проходит выглядит следующим образом где и

Чтобы исправить это, просто ваши, где начинается, как это WHERE 1 = 1 (не забудьте включить замыкающее пространство, а затем вы можете добавить ваши остальные условия

Тем не менее, вы можете создать хранимую процедуру и передать 3 переменные @customer, @user и @name

SELECT * FROM CUSTOMER WHERE 1=1 
    AND CUSTOMER_ID LIKE Isnull(@customer,'')+'%' 
    AND USER_ID LIKE isnull(@user,'')+'%' 
    AND NAME LIKE isnull(@name,'')+'%' 
0

Обратите внимание, что с помощью такого рода гибкой логики в SQL может повлиять способность базы данных выбирать хорошую план выполнения. http://use-the-index-luke.com/sql/where-clause/obfuscation/smart-logic

Если запрос действительно довольно простой запрос, как в примере, то вы могли бы быть лучше придерживаться

String query = "SELECT * FROM Customer" 
if(customer!=null && customer.length!=0) 
     query = query + " WHERE CUSTOMER_ID LIKE '"+customer+"%'"; 
else if(user!=null && user.length!=0) 
     query = query + " WHERE USER_ID LIKE '"user+"%'"; 
else if(name!=0 && name.length!=0) 
     query = query + " WHERE NAME LIKE '"+name+"%'"; 

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

В противном случае предыдущий ответ правильный, кроме 1 = 1 И кажется излишним.