我尝试了语法上不正确的内容,否则很容易解决:
SELECT MIN(id) FROM table1 WHERE id > IN (ids)
method(List<Integer> ids)
我现在正在做什么:
查询1: 获得的列表:
SELECT id FROM table1 WHERE someRecord=1;
List<Integer> integers;
查询2: 使用for循环遍历列表并将下一个记录ID保存到列表中:
List<Integers> newIds=new ArrayList();
for(Integer i:integers){
newIds.add(SELECT MIN(id) FROM table1 WHERE id >i);
}
查询3: 提取所有下一条记录:
SELECT * FROM table1 WHERE id IN (newIds);
getIds(List<Integer> newIds)
如何使用MIN(id)或其他带有ID列表(ids> IN(2,3,4))的东西,以便查询返回所有接下来的记录,分别对应于各个记录?
更新:(无法按预期工作)
SELECT id FROM table1 WHERE id > (SELECT table1.id FROM table1 WHERE id IN (:integer_ids))
getNextRecordIds(List<Integer> integer_ids)
答案 0 :(得分:0)
我不知道这是否有帮助,但是请考虑使用下一个查询来替换帖子中的Query1-Query3(以下方法中的id
参数是Query1中的参数):
@Query("WITH result2 AS " +
"(SELECT min(id) AS idNext FROM table1 JOIN (SELECT id AS idPrev FROM table1 WHERE someRecord = :id) AS result1 ON table1.id > result1.idPrev GROUP BY result1.idPrev) " +
"SELECT * FROM table1 JOIN result2 ON table1.id=result2.idNext")
List<Table1> getNextRecords(Int id)
答案 1 :(得分:0)
如果列表中的每个id
在表中都存在...
SELECT
(SELECT MIN(lookup.id)
FROM table1 AS lookup
WHERE lookup.id > table1.id
)
FROM
table1
WHERE
id IN (:integer_ids)
如果id
列表中可以包含值Not in table,请首先将列表插入到临时表中。
SELECT
(SELECT MIN(lookup.id)
FROM table1 AS lookup
WHERE lookup.id > list.id
)
FROM
#temporaryTable AS list