我正在使用 SQLite 数据库中的 GTFS 数据。我有一个 StopTimes 表,其中包含trip_id、stop_sequence 和department_time 列(以及其他列)。我想为每次旅行清空最后一次离开时间(在具有最大 stop_sequence 的元组中)。
我能想到的最明显的方法是这个查询:
UPDATE StopTimes AS A
SET departure_time = NULL
WHERE NOT EXISTS
(
SELECT * FROM StopTimes B
WHERE B.stop_sequence > A.stop_sequence
)
不幸的是,看起来我不能在 SQLite 的 UPDATE 语句中为表使用别名。查询失败(在 Python 中)“sqlite3.OperationalError: near "AS": syntax error”,并且 SQLite 中也不允许使用这种其他样式:
UPDATE A
SET departure_time = NULL
FROM StopTimes AS A
WHERE NOT EXISTS
(
SELECT * FROM StopTimes B
WHERE B.stop_sequence > A.stop_sequence
)
我尝试了其他几个变体,例如使用 ">= ALL (SELECT stop_sequence... WHERE trip_id = ? ...)",但我无法填写那个问号。
我也试过这个,但看起来这不是有效的 SQL:
UPDATE StopTimes
SET departure_time = NULL
WHERE (trip_id, stop_sequence) IN
(
SELECT trip_id, MAX(stop_sequence)
FROM StopTimes
GROUP BY trip_id
)
如何使用 SQLite 接受的语法在 UPDATE 查询的子查询中引用外部表的属性?有什么方法可以重新制定我的查询来绕过这个限制吗?