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 に答える