如何在SQL中实现if else功能?

时间:2016-06-24 10:57:25

标签: java mysql sql-server

我有一个SQL查询,其中我有customer_id,User_id和name,这些值将在调用查询时从java类中提供。 这里的场景是,如果我有customer_id,那么我应该只考虑customer_id而不需要考虑user_id和name,如果customer_id为null,那么我必须考虑user_id,如果user_id id为null,我必须考虑名称。

现在,这个逻辑是在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+"%'";

2 个答案:

答案 0 :(得分:0)

您构造的SQL有一个小缺陷。

条件WHERE子句以 AND 开头。唯一的问题是传递的第一个看起来像 WHERE AND

要解决此问题,只需让您的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,'')+'%'

答案 1 :(得分: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 AND 似乎是多余的。