Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite从复合主键中选择上一行/下一行_Sql_Database_Sqlite - Fatal编程技术网

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

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

我正在使用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 (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) <(?, ?, ?)