首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite分拣法

sqlite分拣法
EN

Stack Overflow用户
提问于 2019-02-14 03:53:37
回答 1查看 99关注 0票数 1

我正试图用sqlite查询来排序我的android应用程序中的一些数据

代码语言:javascript
复制
cursor c = db.query(TABLE_NAME, null, DRILL_TYPE + " IN ('type 1', 'type 2');", null, null, null, SIZE + " ASC", null);

我预计结果会按大小排序,不管钻取是类型1还是类型2,但我得到了所有的类型1排序,然后我得到了所有的类型2排序。我的查询出现了什么问题呢?

代码语言:javascript
复制
expected:
type 1     1
type 2     2
type 1     3
type 2     4
type 1     5
type 2     6

actual result:
type 1     1
type 1     3
type 1     5
type 2     2
type 2     4
type 2     6

编辑,在原问题回答后:-

移除顺序末尾的分号当我使用IN时固定事物,但当我使用not IN时不固定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-14 05:51:01

我相信这个问题可能是由于IN子句末尾的分号;引起的.这将有效地标记SQL的结束,从而导致忽略/省略ORDER子句。

那就是尝试:-

代码语言:javascript
复制
cursor c = db.query(TABLE_NAME, null, DRILL_TYPE + " IN ('type 1', 'type 2')", null, null, null, SIZE + " ASC", null);

在以下方面:

移除顺序末尾的分号当我使用IN时固定事物,但当我使用not IN时不固定。

使用

代码语言:javascript
复制
 cursor c = db.query(TABLE_NAME, null, DRILL_TYPE + " NOT IN ('type 1', 'type 2')", null, null, null, SIZE + " ASC", null);

将对没有类型1类型2的行进行排序时,正确地考虑以下因素(这会复制您的情况,但有额外的数据来显示非IN结果):

代码语言:javascript
复制
DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (drill_type TEXT, size INTEGER);
INSERT INTO mytable VALUES
('type 2',4),('type 1',5),('type 2',6),
    ('type 1',1),('type 2',2),('type 1',3),
    ('type 4',14),('type 3',15),('type 4',16),
    ('type 3',11),('type 4',12),('type 3',13)
;

SELECT * FROM mytable WHERE drill_type IN ('type 1','type 2') ORDER BY size ASC;
SELECT * FROM mytable WHERE drill_type NOT IN ('type 1','type 2') ORDER BY size ASC;
SELECT * FROM mytable WHERE drill_type NOT IN ('type 1','type 2'); ORDER BY size ASC; -- will not sort as expected
  • 注意,上面的内容有效地复制了代码。

结果如下:

  1. 原解

  1. 正确使用NOT IN

  1. 把分号留在

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54682978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档