7

sqlite3 の私の sql クエリは、OR ステートメントで終わります。次のようになります。

select
   (...)
from
    T1, T2, .... Tn

where
     (...) and
     (
     (T5.v='s1' and T6.v='s2' and T7.v='s3') OR
     (T5.v='s4' and T6.v='s5' and T7.v='s6')
     )

クエリは結果を返しません

ただし、個別の「OR」条件ごとにいくつかの行が返されます (!)

where
     (...) and
     (
     (T5.v='s1' and T6.v='s2' and T7.v='s3')
     )

where
     (...) and
     (
     (T5.v='s4' and T6.v='s5' and T7.v='s6')
     )

それはsqlite3のバグですか、それとも私ですか?

$ sqlite3 -version
3.6.20

更新: T5.v、T6.v、および T7.v に 3 つの一意でないインデックスがあります。

4

1 に答える 1

1

コメントで以前に述べたように、sqlite 3-6-22の変更ログには以下が含まれます。

Fix bugs that can (rarely) lead to incorrect query results when the CAST or OR operators are used in the WHERE clause of a query.

別の OR バグは3-7-4で修正されました:

http://www.sqlite.org/src/info/80ba201079

3-7-14-1の別のもの:

Fix a bug (ticket [d02e1406a58ea02d]]) that causes a segfault on a LEFT JOIN that includes an OR in the ON clause.

そして3-7-17の別のもの:

http://www.sqlite.org/src/info/f2369304e4

より新しい sqlite バージョンにアップグレードして、問題が解決するかどうかを確認することをお勧めします。

于 2013-08-07T07:49:28.567 に答える