0

Python3 で SQLite3 クエリを実行すると、予期しない結果が得られます。

if first_waypoint_number < last_waypoint_number:
        result = list(c.execute("SELECT WPNumber, WPID, ROUTE FROM rte WHERE ROUTE = ? AND WPNumber BETWEEN ? AND ?", (route, first_waypoint_number, last_waypoint_number)))
        print(result)
else:
        result = list(c.execute("SELECT WPNumber, WPID, ROUTE FROM rte WHERE ROUTE = ? AND WPNumber BETWEEN ? AND ? ORDER BY WPNumber DESC", (route, first_waypoint_number, last_waypoint_number)))
        print(result)

最初のクエリは期待どおりに機能し、次の結果が生成されます。

[('A123', 25, 'WAYPOINTX'), ('A123', 26, 'WAYPONTY'), ('A123', 27, 'WAYPOINTZ')]

ただし、2 番目のクエリは空のリストを生成しますが、[]逆の順序で同じリストを返す必要があります。

問題なく SQLite3 で両方のクエリをテストしました。

ここで何か不足していますか?

4

1 に答える 1

2

sqliteBETWEEN演算子は と同等x>=y AND x<=zであるため、 の場合は何も一致しませんy > z

sqlite> create table foo (x int);
sqlite> insert into foo values (1);
sqlite> insert into foo values (2);
sqlite> insert into foo values (3);
sqlite> insert into foo values (4);
sqlite> select * from foo;
1
2
3
4
sqlite> select * from foo where x between 2 and 3;
2
3
sqlite> select * from foo where x between 3 and 2;
sqlite> 
于 2013-10-07T19:42:22.153 に答える