获取与Room数据库中已获取的所有下一条记录相关的所有记录?

时间:2020-10-30 13:47:43

标签: sql android-room

我尝试了语法上不正确的内容,否则很容易解决:

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))的东西,以便查询返回所有接下来的记录,分别对应于各个记录?

更新:(无法按预期工作)

如果其他人正在寻找,但下面的查询可用于获取所有下一条记录,但目前Room DB中尚无办法将MIN(id)与List一起使用。
SELECT id FROM table1 WHERE id > (SELECT table1.id FROM table1 WHERE id IN (:integer_ids))
getNextRecordIds(List<Integer> integer_ids)

2 个答案:

答案 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