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')
     )

查询不返回任何结果。

但是,每个不同的“或”条件都会返回一些行(!)

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 上有三个非唯一索引

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 回答