0

SQLite(バージョン3)で奇妙な動作に直面しています。

エンジンとギアを参照する2つの列を持つ車両のテーブルがあります。もちろん、同じエンジンギアの組み合わせで複数の車両が存在する可能性があります。

ここで、車両のエンジンとギアの明確な組み合わせを見つけたいと思います(そして、それをインサートに使用します=>それがrandomblob(36)の理由です)。

例:

Vehicle | EngineId | GearId 
-----------------------------
    1   |     1    |    1
    1   |     1    |    2
    1   |     2    |    1
    1   |     2    |    2
    1   |     1    |    2
    1   |     1    |    2

次のselectステートメントでは、行が多すぎます。

 Select randomblob(36), tmp.EngineId, tmp.GearId from (Select distinct EngineId, GearId from tblVehicle order by EngineId, GearId) as tmp; 


RandomId| EngineId | GearId 
-----------------------------
    1   |     1    |    1
    2   |     1    |    2
    3   |     2    |    1
    4   |     2    |    2
    5   |     1    |    2
    6   |     1    |    2

しかし、期待される結果は次のようになります。

RandomId| EngineId | GearId 
-----------------------------
    1   |     1    |    1
    2   |     1    |    2
    3   |     2    |    1
    4   |     2    |    2

randomblob(36)を定数に置き換えると、結果は期待どおりになります(もちろん、ランダムIDはありません)。

tmpとして2、tmp.EngineId、tmp.GearIdを選択します(EngineId、GearIdによるtblVehicleの順序から個別のEngineId、GearIdを選択します)。

誰かが私にSQLiteのこの振る舞いを説明できますか?これは予想される動作ですか?

4

1 に答える 1

1

これはバグです。

これはSQLite3.6.23.1で再現できますが、3.7.15では再現できないため、すでに修正されています。

于 2012-10-18T15:47:31.783 に答える