我在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之前)
任何人都可以帮助我。提前谢谢。
答案 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