我有一个类似下面的问题
select STUDENT_REGN from STUDENT where STUDENT_ROLL = :stRoll and STUDENT_ROLL_TYPE = :rType
用户最多可以给出5种不同的 student_roll
及 student_roll_type
这是唯一用来识别学生的。我想通过命名参数jdbc模板执行这个查询。
但问题是,我必须在一个循环中为5个不同的用户输入运行这个查询5次。是否有一种方法可以在一次数据库调用中获取所有5种组合的记录,从而获得更好的性能?
我无法在代码中执行select*并过滤掉记录,因为表中有大量记录。我也不允许在运行时构建动态查询。
1条答案
按热度按时间axr492tv1#
不容易。你可以写一个联合体,或者使用
IN
,或使用parens和AND
及OR
:虽然您必须对“5个组合”部分进行“硬编码”,并且始终必须指定10个实际值(从
stRoll1
及rType1
另一种选择是先编写一些代码来构造这个查询。类似的诡计也可以用来代替工会:
但是[1]这可能不是你想要的(任何rtype和任何漫步的组合都会匹配,我认为你想要的是所有与特定的roll/type组合匹配的学生,而不是“任何一个roll是这些组合中的任何一个,其类型是这些组合中的任何一个的学生”,并且[2]我不完全确定jdbctemplate是否能够旋转单个
?
成倍?, ?, ?
缩放到列表输入的大小。剩下的是:
你也可以很容易地构造这个(记住,
where false OR ...
同样有效,而且查询优化器不会因为这个毫无意义的问题而慢下来or
-因此,您可以重复添加一个简单的字符串(" OR (STUDENT_ROLL = :stRoll" + idx + " and STUDENT_ROLL_TYPE = :rType" + idx + ")"
).