-1

我在 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)")

我需要该表中的所有数据,但首先我希望不需要排序的第一个查询返回的行,但是在这些行之后,我希望所有行(不喜欢)按排序顺序,我以排序形式获取所有数据,在第一个位置,它没有返回第一个查询的行(在联合所有之前)

谁可以帮我这个事。提前致谢。

4

1 回答 1

4

您只能订购整个结果。

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

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
于 2013-06-04T08:44:33.960 回答