1

这适用于 Android SQLite。我有两个这样的查询:

select * from table where name='name';

select * from table where name!='name' order by name;

我想创建一个结合这两个查询的语句。我尝试了 union all 但我不能通过一个语句进行排序然后合并。我试过这个:

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

4 回答 4

4

无需使用临时表,您需要添加额外的列进行排序。像这样的东西:

select 1, * from table where name='name'
union all
select 2, * from table where name!='name' 
order by 1, name;

我现在没有安装 sqlite,但是这个技巧应该可以工作。(您可能必须为第一列添加别名)。

于 2012-09-24T21:23:50.380 回答
1

除非您可以使用表的其他一些属性来提供允许在两个选择之间连接的排序,如如何组合两个 sql 查询?那么我认为您必须将应该浮动到顶部的查询结果存储在临时表中,然后在存储之前将排序结果添加到该表中。

我从未在 Android 中使用过临时表,因此无法提供示例,但据我所知,这是可能的。

我建议分别运行这两个查询,然后在您的情况下将结果合并到代码中。

于 2012-09-24T21:22:04.233 回答
1

根据 SQLLite 文档,这不能使用UNIONor来完成,UNION ALL因为这些操作必须在简单的选择上执行(没有 的操作Order by)。

http://www.sqlite.org/lang_select.html

可能有一种我不知道的非常聪明的方法来做到这一点,这通常会导致我只做两个查询并在 java 中组合结果。

[编辑] Jhovanny 有一个非常聪明的方法来做到这一点。

于 2012-09-24T21:24:32.800 回答
1

现在无法测试它,但是这样的东西应该可以工作:

select t.*, case when name = 'name' then 0 else 1 as o from table t order by o, name;

那么你没有两个选择也没有联合。假设您可以在 android 上的 sqlite 中使用 case 语句。

于 2012-09-24T21:29:14.607 回答