这适用于Android SQLite。我有两个这样的问题:
select * from table where name='name';
和
select * from table where name!='name' order by name;
我想创建一个结合了这两个查询的语句。我尝试了所有的联合,但我不能通过一个声明来做订单然后合并。我试过这个:
select * from table where name='name'
union all
select * from table where name!='name' order by name;
它所做的就是组合查询,然后按名称排序。我不希望这样。我想首先在第二个声明中进行排序,然后将它们组合起来。
以不同的方式提出问题,这是我的数据:
Name
a
b
c
d
e
f
g
h
i
j
但我希望输出为:
Name
g
a
b
c
d
e
f
h
i
j
我希望将一行放到顶部,然后对其余行进行排序。任何帮助表示赞赏。
答案 0 :(得分:4)
无需使用临时表,您需要添加其他列进行排序。像这样:
select 1, * from table where name='name'
union all
select 2, * from table where name!='name'
order by 1, name;
我现在没有安装sqlite,但这个技巧应该可行。 (您可能需要在第一列添加别名)。
答案 1 :(得分:1)
除非表格的某些其他属性可以用来提供排序,允许在How to combine two sql queries?中的两个选择之间进行连接,然后我认为你必须存储应该浮动的查询结果到临时表的顶部,然后在存储之前将排序后的结果添加到该表中。
我从未在Android中使用临时表,所以无法提供示例,但据我所知,这是可能的。
我建议单独运行两个查询,然后在您的情况下将结果合并到代码中。
答案 2 :(得分:1)
根据SQLLite文档,使用UNION
或UNION ALL
无法完成此操作,因为这些操作必须在简单的选择上执行(没有Order by
的操作)。
http://www.sqlite.org/lang_select.html
我可能还有一种非常聪明的方法,我不知道,这通常会让我只做两个查询并将结果合并到java中。
[编辑] Jhovanny有非常聪明的方法去做。
答案 3 :(得分:1)
现在无法测试,但这样的事情应该有效:
select t.*, case when name = 'name' then 0 else 1 as o from table t order by o, name;
然后你没有两个选择也没有联合。假设你可以在android上的sqlite中使用case语句。