使用一条sql语句进行不同的搜索组合

     2023-05-09     116

关键词:

【中文标题】使用一条sql语句进行不同的搜索组合【英文标题】:Using one sql statement for different search combinations 【发布时间】:2020-05-01 13:15:12 【问题描述】:

我是 SQL 新手,我在我的 Java 程序中实现了这个搜索方法,它从 1 到 5 个文本字段中获取搜索输入并搜索满足搜索条件的对象。

4 个数据库列在一个表中,但 1 个在另一个表中,我可以在搜索中加入。

问题是这只是一个 AND 搜索,这意味着如果即只有 name 有输入,则搜索具有该 name 的对象,但如果 name 和 age 有输入,则 object 必须同时具有两者。我的结论是,这些是 31 种搜索组合,我可以使用 If 为每个搜索组合创建 AND 查询,但是我能否以某种方式创建一个忽略空输入但如果不为空则包含它的 SQL 语句?

示例 亲自搜索的表格

TextField 1 名称:“John”

TextField 2 年龄:""

TextField 3 权重:120

TextField 4 头发颜色:“绿色”

由于输入为空,SQL 将忽略 select from age,但使用 AND 搜索其他 3 个条件。

【问题讨论】:

它确实需要“动态 SQL”。在纯 JDBC 中,您需要连接字符串;如果您使用的是 ORM,一些标签会为您轻松完成。你使用的是普通的 JDBC 还是 ORM? 我使用的是普通 JDBC 样本数据和期望的结果真的很有帮助。您提到了两个表,但不清楚它们是什么。您提到了一个“对象”,但不清楚它指的是什么。 Object 在这里使用了错误的词,我正在寻找满足搜索条件的 ID,即在示例中,我想获取列中具有值的所有行的唯一 personId :姓名、年龄和头发颜色。第二张表在这个问题中可能无关紧要。如果我可以忽略空文本字段但将它们包含在 SELECT * ...AND 查询中,如果它们不为空? 【参考方案1】:

处理参数的一般问题的一种解决方案是使用or。像这样的:

where (name = :name or :name is null) and
      (age = :age or :age is null) and
      . . .

您可以将 from 子句调整为始终为 join 表 - 可能与 left join 一起使用(您的问题不清楚)。或者,您可以使用 exists 子查询。

注意:上述结构需要扫描表中的所有行。它不能使用索引。然而,索引一个表以快速搜索 2^n 个组合本身就很棘手。

【讨论】:

【参考方案2】:

我会使用QueryDSL 之类的东西。为已经解决的问题创建代码是没有意义的,因为您需要编写、测试和维护该代码。

QueryDSL 允许您使用 Java 类动态构建查询。因此,您将为每个输入框添加一个子句。如果您需要添加或删除文本框,请在您的代码中执行相同操作。

【讨论】:

将一个sql语句用于不同的搜索组合(代码片段)

...同时具有两者。我的结论是,这是31种搜索组合,我可以使用If创建每个AND的查询,但是我可以以某种方式创建一 查看详情

使用一条 SQL 语句的结果在另一条语句中进行计数

】使用一条SQL语句的结果在另一条语句中进行计数【英文标题】:UseresultsfromoneSQLstatementtodoacountinanotherstatement【发布时间】:2021-11-0322:10:57【问题描述】:Excel的数据已达到极限,因此我正在尝试使用SQL。我正在使用SQLServer2019Exp... 查看详情

使用一条语句对多个属性和表进行 Oracle SQL 特权授权

】使用一条语句对多个属性和表进行OracleSQL特权授权【英文标题】:OracleSQLprivelegeauthorizationonmultipleattributesandtableswithonestatement【发布时间】:2012-10-2803:13:09【问题描述】:是否可以在一个语句中对不同的表或属性授予不同的权... 查看详情

在一条 SQL 语句中组合多个连接

】在一条SQL语句中组合多个连接【英文标题】:combiningmultiplejoinsinoneSQLstatement【发布时间】:2021-03-0220:07:15【问题描述】:我的数据库架构中有三个表:MY_TABLE、CREATIVE_SIZE、REVERSE_CREATIVE_SIZEMY_TABLE由三列组成|NAME|BANNER_W|BANNER_H||320... 查看详情

在 SQL 中对不同组合进行排序

...据,并试图在一大群患者中对三种特定药物(A、B、C)的使用情况进行排名。简而言之,我想找出人们使用的这些药物的前12种组合。因此,例如,患者1可能服用A+B药物,患者2服用A+C,患者3服用B+C,患者4服用A+B,依此类推。我... 查看详情

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

】组合不同(冗长)SQL语句的列的最简单方法-MSSQL【英文标题】:Easiestwaytocombinecolumnsofdifferent(lengthy)SQLstatements-MSSQL【发布时间】:2021-08-2516:51:56【问题描述】:我有多个查询要组合,所有这些查询都有自己的连接,很难重新编... 查看详情

详解一条sql语句的执行过程(代码片段)

...据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL语句的底层实现不同罢了,但结果相同。这有点类似于java中接口的作用,一个接口可以有不同的实现类,不同的实现类对于接口中方法的实现方式可以不同,结果... 查看详情

SQL 组合多个 SELECT 语句

...。我需要在搜索参数中为每一天获取一个单独的行,然后使用某些布尔值编译这些日期内的行总数。这是我目前的查询:SELECTDATE(DateTime)ASSear 查看详情

在 SQL Server 2014 中创建一个视图,该视图将三个查询与不同的 where 语句组合在一起

...【发布时间】:2016-03-2817:29:48【问题描述】:我正在尝试使用将查询2中的引号与查询1中的引号以及查询3中的策略与查询1中的策略相结合的视图来创建一个 查看详情

一个叫team的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球队,现在四个球队进行比赛,用一条sql语句显示所有可能的比赛组合.

select*fromtimpa,timpbwherea.name>b.name结果:  查看详情

对网格搜索中的所有组合使用交叉验证

】对网格搜索中的所有组合使用交叉验证【英文标题】:Usingcrossvalidationonallcombinationsingridsearch【发布时间】:2017-04-0319:46:15【问题描述】:我正在使用支持向量机对一些数据进行分类。我已将数据拆分为训练集和验证集,并使... 查看详情

使用“一条”sql语句完成批量插入和批量删除操作

使用一条SQL语句做批量插入和删除操作最近在做内容管理系统的时候发现一个问题:多复选框复选框操作,当全选的时候是批量往数据库中的某表插入数据,反选的时候需要批量删除表中的多行数据,删除某一条&... 查看详情

sql学习之组合查询(union)

...些组合查询通常称为并或复合查询。主要有两种情况需要使用组合查询:(1)在一个查询中从不同的表返回结构数据(2)对一个执行多个查询,按一个查询返回数据 2、使用UNION使用UNION很简单,所要做的只是给出每条SELECT语 查看详情

访问中的 SQL 更新语句的语法错误

...间】:2016-06-3013:57:04【问题描述】:我在MSAccess中运行了一条SQLUPDATE语句,但收到一条错误消息查询表达式中的语法错误(缺少运算符)我在互联网上进行了搜索,但任何解决方案都适用于我的情况。我的代码是:PrivateSubCommand11... 查看详情

sql如何显示查询结果的前100条?

...3、在mysql数据库中:select * from 表名limit0,100,使用idea进行示例如下:扩展资料:如果要查询指定条数的搜索结果,可以使用limit函数实现,Limit子句可以被用于强制SELECT语句返回指定的记录数。例如使用SQL语句显示查... 查看详情

数据库演练外键sql语句的编写&分组和聚合函数的组合使用(代码片段)

...键约束4.删除外键约束5.小结演练-分组和聚合函数的组合使用1.数据准备2.SQL语句演练外键SQL语句的编写学习目标能够写出删除外键约束的SQL语句1.外键约束作用外键约束:对外键字段的值进行更新和插入时会和引用表中字段的数据... 查看详情

关于sql数据库中crossjoin和innerjoin用法上的区别?

...INNERJOIN这两个语句,查从实际的操作上这两个链接语句的使用好像对于实际的操作上影响不大,请问各大高手,这两个语句当中在实际使用的时候应该要怎样正确使用呢?谢谢!SQL数据库中crossjoin和innerjoin区别为:连接不同、条... 查看详情

sql语句汇总(终篇)——表联接与联接查询(代码片段)

...。要想更详细的理解可以百度下,毕竟本文主要是汇总SQL语句。现在有如下两张表:这是当初老师布置的一份作业,我 查看详情