2

2 つのテーブルがあり、それぞれから 1 つの列を選択する必要があります。これは、単一のクエリで実行する必要があります。幸いなことに、2 つの列は正しい順序で並べられており、どちらにも同じ数の行が含まれています。これで、ROWID で 2 つのテーブルを JOIN できることがわかりましたが、その比較を行う必要があるため時間がかかります。私の場合は必要ありません...同じ長さの2つの列を連結するには、水平のUNION ALLのようなものが必要です。

SQLite 3 でそのようなことは可能ですか?

ありがとう。

表1:

| timestamp | FIELD1 | FIELD2 | ...
| 12345678  | 000000 | 000000 | ...
| 00154789  | 000000 | 000000 | ...

表 2:

| temperature |
| 1000000000  |
| 2000000000  |

必要な選択出力

| timestamp | temperature |
| 12345678  | 1000000000  |
| 00154789  | 2000000000  |

クエリ:

SELECT timestamp, temperature
FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.rowid = TABLE2.rowid;

私のテストアプリでは、これに約 0.75 秒かかります。2 つの別々の SELECT を実行し、プログラムの後半で出力を結合すると、約 0.4 秒かかりますが、あまり便利ではありません。最速の方法 (~0.23 秒) は、1 つのテーブルに両方の列を含めることですが、同じタイムスタンプを共有する TABLE2 の複数のバージョンがあるため、無駄です。

4

1 に答える 1

0

SQLite がサポートしていますUNION ALL

UNION、UNION ALL、INTERSECT、または EXCEPT 演算子を使用して、2 つ以上の単純な SELECT ステートメントを結合して、複合 SELECT を形成することができます。複合 SELECT では、すべての構成要素の SELECT が同じ数の結果列を返す必要があります。複合 SELECT のコンポーネントは単純な SELECT ステートメントでなければならないため、ORDER BY または LIMIT 句を含めることはできません。ORDER BY 句と LIMIT 句は、複合 SELECT 全体の最後にのみ使用できます。

UNION ALL 演算子を使用して作成された複合 SELECT は、SELECT から UNION ALL 演算子の左側にあるすべての行と、SELECT からその右側にあるすべての行を返します。UNION 演算子は、重複する行が最終結果セットから削除されることを除いて、UNION ALL と同じように機能します。INTERSECT 演算子は、左右の SELECT の結果の共通部分を返します。EXCEPT 演算子は、左側の SELECT によって返され、右側の SELECT によっても返されない行のサブセットを返します。結果セットが返される前に、INTERSECT および EXCEPT 演算子の結果から重複行が削除されます。

于 2011-05-11T21:28:14.273 に答える