Sqlite从复合主键中选择上一行/下一行
我正在使用sqlite3。假设我有一个表t和三个字段id,a,B和C,其中id是主键 要根据id的顺序选择上一行,我执行以下操作:Sqlite从复合主键中选择上一行/下一行,sql,database,sqlite,Sql,Database,Sqlite,我正在使用sqlite3。假设我有一个表t和三个字段id,a,B和C,其中id是主键 要根据id的顺序选择上一行,我执行以下操作: SELECT * FROM t WHERE ? < id ORDER BY id desc limit 1 但是,如果我有复合主键,并且我想要得到上一行/下一行呢 也就是说,如果我的字段是id1、id2、id3、A、B、C和id1,id2和id3是我的复合主键,该怎么办 谢谢。相同的想法,但比较逻辑更麻烦: SELECT * FROM t WHERE (id
SELECT * FROM t WHERE ? < id ORDER BY id desc limit 1
但是,如果我有复合主键,并且我想要得到上一行/下一行呢
也就是说,如果我的字段是id1、id2、id3、A、B、C和id1,id2和id3是我的复合主键,该怎么办
谢谢。相同的想法,但比较逻辑更麻烦:
SELECT *
FROM t
WHERE (id1 < ?) OR
(id1 = ? AND id2 < ?) OR
(id1 = ? AND id2 = ? AND id3 < ?)
ORDER BY id1, id2, id3 ASC
LIMIT 1;
选择*
从t
其中(id1<?)或
(id1=?和id2<?)或
(id1=?和id2=?和id3<?)
id1、id2、id3 ASC订购
限值1;
还可以使用元组比较:
WHERE(id1, id2, id3) <(?, ?, ?)
WHERE(id1、id2、id3)您必须将组合键的所有组件包含在ORDER BY
因此,这些声明就变成了
选择*FROM t WHERE?<按id描述的id订单,字母描述限制1
及
选择*FROM t WHERE?>id订单按id ASC,字母ASC限制1
请注意,您必须注意您希望单独组件的顺序
WHERE(id1, id2, id3) <(?, ?, ?)