将一个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语句用于不同的搜索组合的主要内容,如果未能解决你的问题,请参考以下文章

SQL 组合多个 SELECT 语句

组合不同(冗长)SQL 语句的列的最简单方法 - MSSQL

用于从 cloudkit 检索单列的代码模式/片段

片段着色器输出干扰条件语句

如何让多个不同的SQL语句一起执行?

sql索引