如何使用SQLite使用UNION ALL和ORDER BY进行排序

时间:2013-06-04 06:23:22

标签: android sqlite sql-order-by union-all

我在android中的SQLite数据库中有一些数据。我想使用WHERE子句从数据库中检索数据使用LIKE和NOT LIKE条件。我使用UNION ALL命令组合两个语句。为此,查询是

SELECT * FROM TABLENAME WHERE column_name LIKE SOMTHING.

这将返回一些行。然后我正在写查询

SELECT * FROM TABLENAME WHERE column_name NOT LIKE SOMTHING.

这将返回剩余的行。

我希望首先返回第一个查询的项目,然后是第二个查询项目。这可以通过使用UNION ALL命令来实现。所以查询就像

 db.rawQuery("SELECT * FROM TABLENAME WHERE column_name LIKE SOMTHING UNION ALL SELECT * FROM TABLENAME WHERE column_name NOT LIKE SOMTHING")

但我希望在第一个查询项目/项目之后排序顺序排列第二个查询项目。所以我写了像

这样的查询
 db.rawQuery("(SELECT * FROM TABLENAME WHERE column_name LIKE SOMTHING) UNION ALL (SELECT * FROM TABLENAME WHERE column_name NOT LIKE SOMTHING ORDER BY column_name)")

我需要从这张桌子上获取所有数据,但我首先想要的是第一次返回需要不被排序的行,但是在这些行之后我想要所有行(不合适)在排序顺序中, 我以排序的形式获取所有数据,在第一个位置它没有返回第一个查询的行(在union all之前)

任何人都可以帮助我。提前谢谢。

1 个答案:

答案 0 :(得分:3)

您只能订购整个结果。

这意味着您必须引入一个虚拟列才能区分记录与子查询:

SELECT *, 0 AS SubQueryNr FROM TableName WHERE column_name LIKE ?
UNION ALL
SELECT *, 1               FROM TableName WHERE column_name NOT LIKE ?
ORDER BY SubQueryNr, column_name

或者,只需使用LIKE条件进行排序:

SELECT * FROM TableName
ORDER BY column_name LIKE ? DESC