我知道可以使用如下语句选择下一个或上一个X记录:
Next: `SELECT * FROM table WHERE some_key > 3 ORDER BY some_key ASC LIMIT X`
Previous: `SELECT * FROM table WHERE some_key < 3 ORDER BY some_key DESC LIMIT X`
但是我正在使用一种语言,它在结果上返回一个Cursor,我希望我的所有结果都在一个游标中。
是否可以在单个SQL语句中选择当前记录以及X next和previous记录?
答案 0 :(得分:1)
您可以尝试使用UNION:
SELECT * FROM table WHERE some_key > 3 ORDER BY some_key ASC LIMIT X
UNION
SELECT * FROM table WHERE some_key = 3
UNION
SELECT * FROM table WHERE some_key < 3 ORDER BY some_key DESC LIMIT X
您可能需要修复联盟外部的排序,但上面的内容会为您提供您正在寻找的some_key = 3
窗口,它会干净地处理some_key
值中的差距。
答案 1 :(得分:1)
最后,我使用了@mu的答案,进行了一些修改
在Android中,您无法在ORDER BY
中使用内部UNION
语句,只能在整个集合中使用单个外部ORDER BY
。为了解决这个问题,我使用了Android上的SQLite支持内部查询,在内部查询中执行每个实际选择,然后从内部查询中选择所有行到union的事实,如下所示:
SELECT * FROM (SELECT * FROM table WHERE some_key > 3 ORDER BY some_key ASC LIMIT X)
UNION
SELECT * FROM table WHERE some_key = 3
UNION
SELECT * FROM (SELECT * FROM table WHERE some_key < 3 ORDER BY some_key DESC LIMIT X)