如何将两个查询合并为一个?

时间:2012-09-24 21:15:26

标签: android sql sqlite select

这适用于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

我希望将一行放到顶部,然后对其余行进行排序。任何帮助表示赞赏。

4 个答案:

答案 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文档,使用UNIONUNION 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语句。