1

以下查询在 SQL Server 中有效,但在 SQLite 3.8.7 中无效,我想知道原因。

桌子

l | r
0 | 10
0 | 2
8 | 10

询问

SELECT * FROM Segments AS s1
LEFT JOIN Segments AS s2
    ON ((s2.l <= s1.l AND s2.r > s1.r)
        OR (s2.l < s1.l AND s2.r >= s1.r));

预期产出

s1.l | s1.r | s2.l | s2.r
0    | 10   | null | null
0    | 2    | 0    | 10
8    | 10   | 0    | 10

然而我得到了

 s1.l | s1.r | s2.l | s2.r
 0    | 10   | 0    | 2
 0    | 2    | 0    | 10
 8    | 10   | 0    | 10

当我切换表达顺序时,即

((s2.l < s1.l AND s2.r >= s1.r) (s2.l <= s1.l AND s2.r > s1.r))

我有

s1.l | s1.r | s2.l | s2.r
0    | 10   | 8    | 10
0    | 2    | 0    | 10
8    | 10   | 0    | 10

这是通过使用 | 解决的 而不是 OR,但我想知道为什么 OR 不起作用?

这是 SQLFiddle http://sqlfiddle.com/#!7/15859/22/1上的示例

谢谢

4

1 回答 1

0

这是在 SQLite 3.8.7.2 中修复的错误。

于 2015-05-04T08:09:59.223 回答