SQLite从复合主键中选择上一行/下一行

时间:2018-07-17 20:40:52

标签: sql database sqlite

我正在使用sqlite3。假设我有一个表t和三个字段id,A,B和C,其中id是主键。

要根据ID的顺序选择上一行,我要做:

SELECT * FROM t WHERE ? < id ORDER BY id desc limit 1

对于下一行,我这样做:

SELECT * FROM t WHERE ? > id ORDER BY id ASC limit 1

但是如果我有复合主键并且想要获得上一行/下一行怎么办?

即如果我的字段是id1,id2,id3,A,B,C和id1,id2和id3是我的复合主键怎么办?

谢谢。

2 个答案:

答案 0 :(得分:1)

想法相同,但是比较逻辑比较麻烦:

SELECT *
FROM t
WHERE (id1 < ?) OR
      (id1 = ? AND id2 < ?) OR
      (id1 = ? AND id2 = ? AND id3 < ?)
ORDER BY id1, id2, id3 ASC 
LIMIT 1;

您还可以使用元组比较:

WHERE(id1, id2, id3) <(?, ?, ?)

答案 1 :(得分:0)

您将必须在ORDER BY

上包括组合键的所有组件。

因此,语句变为。

SELECT * FROM t WHERE ? < id ORDER BY id DESC, letter DESC limit 1

SELECT * FROM t WHERE ? > id ORDER BY id ASC, letter ASC limit 1

请注意,您将必须注意要使用单独的组件的顺序。