将一个sql语句用于不同的搜索组合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将一个sql语句用于不同的搜索组合相关的知识,希望对你有一定的参考价值。
我是SQL的新手,我在Java程序中实现了此搜索方法,该方法从1到5个文本字段获取搜索输入,并搜索满足搜索条件的对象。
数据库列中的4个在一个表中,而1个在另一个表中,我可以在搜索中加入。
这只是一个AND搜索,这意味着如果仅输入名称,然后搜索具有该名称的对象,但是如果输入名称和年龄,则对象必须同时具有两者。我的结论是,这是31种搜索组合,我可以使用If创建每个AND的查询,但是我可以以某种方式创建一个忽略空输入的SQL语句,但如果不为空则包括它吗?
示例亲自搜索表
TextField 1名称:“ John”
TextField 2年龄:“”
TextField 3权重:120
TextField 4头发颜色:“绿色”
由于输入为空,SQL会忽略年龄的选择,但使用AND搜索其他3个条件。
解决一般处理参数问题的一种方法是使用or
。像这样的东西:
where (name = :name or :name is null) and
(age = :age or :age is null) and
. . .
您可以将from
子句调整为总是join
表-也许使用left join
(您的问题尚不清楚)。或者,您可以使用exists
子查询。
注:上面的构造要求扫描表中的所有行。它不能使用索引。但是,索引表以对2 ^ n个组合进行快速搜索本身就很棘手。
我会使用类似QueryDSL的名称。为已经解决的问题创建代码是没有意义的,因为您将需要编写,测试和维护该代码。
QueryDSL允许您使用Java类动态构建查询。因此,您将为每个输入框添加一个子句。如果您需要添加或删除文本框,请在代码中执行相同的操作。
以上是关于将一个sql语句用于不同的搜索组合的主要内容,如果未能解决你的问题,请参考以下文章