android - sqlite 按 WHERE 首先排序
问题描述
我正在尝试使用带有查询的 sqlite 对我的 android 应用程序中的一些数据进行排序
cursor c = db.query(TABLE_NAME, null, DRILL_TYPE + " IN ('type 1', 'type 2');", null, null, null, SIZE + " ASC", null);
我希望结果按大小排序,无论钻头是 1 型还是 2 型,但我会先对所有类型 1 进行排序,然后再对所有类型 2 进行排序。我的查询有什么问题导致这种情况?
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 时没有
解决方案
;
我相信这个问题可能是由于IN 子句末尾的分号造成的。这将有效地标记 SQL 的结束,因此导致 ORDER 子句被忽略/省略。
那就是尝试:-
cursor c = db.query(TABLE_NAME, null, DRILL_TYPE + " IN ('type 1', 'type 2')", null, null, null, SIZE + " ASC", null);
关于:-
在我使用 IN 时删除订单部分末尾的分号修复了问题,但在我使用 NOT IN 时没有
使用
cursor c = db.query(TABLE_NAME, null, DRILL_TYPE + " NOT IN ('type 1', 'type 2')", null, null, null, SIZE + " ASC", null);
将对没有type 1或type 2的行进行排序,正确地考虑以下内容(它复制了您的情况,但有额外的数据来显示 NOT IN 结果):-
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
- 请注意,上面有效地复制了您的代码
结果将是:-
- 原始解决方案
- 正确使用 NOT IN
- 留下分号
推荐阅读
- maven - 无法解析项目 org.apache.ambari:ambari-metrics-timelineservice:jar:2.7.5.0.0 的依赖关系
- python - 使用 psql 模式进行 Django 测试
- r - 条形图上的误差线形状不正确
- impersonation - ProcessStartInfo 批处理文件提升的运行权限错误级别 1
- reactjs - React - 从 API 获取数据并使用 MAP 函数返回显示
- tfx - 如何使用 Tensorflow Transform 动态计算 tf.one_hot 中深度参数的多类分类标签数量?
- c - 运算符优先级与评估顺序
- java - 按下设备后退按钮或工具栏后退箭头时如何显示警报对话框或对话框
- python - 如何使用python复制docx文件的内容并将其附加到另一个docx文件
- javascript - 在条件语句中使用会话存储