我想知道是否有一种更优雅的方式来使用Spring的JDBCTemplate进行IN()查询.目前我做的是这样的:
StringBuilder jobTypeInClauseBuilder = new StringBuilder();
for(int i = 0; i < jobTypes.length; i++) {
Type jobType = jobTypes[i];
if(i != 0) {
jobTypeInClauseBuilder.append(',');
}
jobTypeInClauseBuilder.append(jobType.convert());
}
Run Code Online (Sandbox Code Playgroud)
这是非常痛苦的,因为如果我有九行只是为IN()查询构建子句.我想要像准备语句的参数替换
如果我们需要根据给定列的某些值集查询表,我们可以简单地使用IN子句.
但是如果需要基于多个列执行查询,我们就不能使用IN子句(在SO线程中使用grep).
从其他SO线程,我们可以使用连接或存在子句等来规避这个问题.但是如果主表和搜索数据都在数据库中,它们都可以工作.
E.g
User table:
firstName, lastName, City
Run Code Online (Sandbox Code Playgroud)
给定(firstname,lastName)元组的列表,我需要获取城市.
我可以想到以下解决方案.
构造一个选择查询,如,
SELECT city from user where (firstName=x and lastName=y) or (firstName=a and lastName=b) or .....
Run Code Online (Sandbox Code Playgroud)
将所有firstName,lastName值上载到临时表中,并在"用户"表和新登台表之间执行连接.
有没有解决这个问题的方法,一般来说解决这个问题的首选是什么?
我试图使用JPA Criteria API编写以下SQL查询
SELECT * FROM Table1 a
WHERE (a.category, a.priority) IN (
SELECT a1.category, max(a1.priority) FROM Table1 a1 GROUP BY a1.category
)
Run Code Online (Sandbox Code Playgroud)
在功能上,查询选择Table1的元素,每个类别具有最高优先级.
categoryPriority = // defines the pair category/priority
mySubQuery = // defines the subquery
query.where(categoryPriority.in(mySubQuery)
Run Code Online (Sandbox Code Playgroud)
这是我正在寻找的示意图.
定义子查询不是问题,因为它有详细记录.
但我找不到定义这对夫妇的方法(a.category,a.priority).
sql ×2
criteria-api ×1
in-clause ×1
java ×1
jdbc ×1
jdbctemplate ×1
jpa ×1
oracle ×1
spring ×1