要实现多条件查询 其中值为0时为不限条件 怎么用sql实现
例如:查询某地区某类型商铺 有可能地区为不限 类型为中餐 查询时就不需要where 地区=值,而是只有where 类型=中餐,选择地区为北京 类型为中餐 查询时就是where 地区=北京 AND 类型=中餐。
然后还有很多其他条件,在后端用if else判断之后再用不同的sql语句查询的话太繁琐了,不太了解sql但我觉得sql应该有相应的解决方案,求教。
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
把查询的条件作为一个Map params; 然后用一个方法进行额外查询语句的拼接;
public String getWhere(Map params) { String str = ""; if(params.size() > 0) { boolean and = false; for(String param : params.keySet()) { Object value = params.get(param); if(value == null || value.equals(0)) { continue; } else { if(and) { str = str + " and " + param + " = " + " " + value; } else { and = true; str = str + param + " = " + " " + value; } } } } if(str != "") { str = " where " + str; } return str; }
我提供一个思路吧,题主的SQL可以这么写:
SELECT * FROM table WHERE (0=地区值 OR 地区=地区值)AND (0=类型值 OR 类型=类型值);
这样的话,在地区值或者类型值为0的时候,因为第一个条件已经为真,所以不判断第二个条件;如果值不为0,则判断第二个条件。如果我没理解错的话,应该可以满足题主的需求。
mybatis拼SQLJPA拼creteria
把查询的条件作为一个Map params; 然后用一个方法进行额外查询语句的拼接;
我提供一个思路吧,题主的SQL可以这么写:
SELECT * FROM table WHERE (0=地区值 OR 地区=地区值)AND (0=类型值 OR 类型=类型值);
这样的话,在地区值或者类型值为0的时候,因为第一个条件已经为真,所以不判断第二个条件;如果值不为0,则判断第二个条件。如果我没理解错的话,应该可以满足题主的需求。
mybatis拼SQLJPA拼creteria