我正在使用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是我的复合主键怎么办?
谢谢。
答案 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
请注意,您将必须注意要使用单独的组件的顺序。