1

これはAndroidSQLite用です。私はこのような2つのクエリがあります:

select * from table where name='name';

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

これら2つのクエリを組み合わせたステートメントを作成したいと思います。私はすべてを結合しようとしましたが、1つのステートメントで注文してから結合することはできません。私はこれを試しました:

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

クエリを組み合わせて、名前で並べ替えるだけです。私はそれを望んでいません。最初に2番目のステートメントで順序付けを行い、次にそれらを結合したいと思います。

別の言い方をすれば、ここに私のデータがあります:

Name

a
b
c
d
e
f
g
h
i
j

しかし、私は出力を次のようにしたいと思います。

Name

g
a
b
c
d
e
f
h
i
j

1行を一番上にして、残りの行を並べ替えたいと思います。どんな助けでも大歓迎です。

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

テーブルの他の属性がない限り、2つのSQLクエリを組み合わせる方法のように、2つの選択間の結合を可能にする並べ替えを提供するために使用できますか?次に、先頭にフロートするクエリの結果を一時テーブルに保存し、並べ替えた結果をそのテーブルに追加してから保存する必要があると思います。

私はAndroidで一時テーブルを使用したことがないので、例を示すことはできませんが、私が知る限り、それは可能です。

状況に応じて、2つのクエリを別々に実行し、結果をコードで結合することをお勧めします。

于 2012-09-24T21:22:04.233 に答える
1

SQLLiteのドキュメントによると、これは、UNIONまたはを使用して実行することはできませんUNION ALL。これらの操作は、単純な選択(のない選択)で実行する必要があるためOrder byです。

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

これを行うには、おそらく私にはわからない非常に賢い方法があります。これにより、通常、2つのクエリを実行し、結果をJavaで結合することになります。

[編集]そして、ジョバニーはそれを行うための非常に賢い方法を持っています。

于 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;

次に、2つの選択もユニオンもありません。androidのsqliteでcaseステートメントを使用できると仮定します。

于 2012-09-24T21:29:14.607 に答える