具有条件的相关子查询的SQLite更新语法
我正在处理SQLite数据库中的GTFS数据。我有一个StopTimes表,其中包含trip\u id、stop\u sequence和execution\u time等列。我想为每次旅行的最后一次出发时间(在具有最大停止序列的元组中)设置空值 我能想到的最明显的方法是这样一个查询:具有条件的相关子查询的SQLite更新语法,sql,sqlite,gtfs,Sql,Sqlite,Gtfs,我正在处理SQLite数据库中的GTFS数据。我有一个StopTimes表,其中包含trip\u id、stop\u sequence和execution\u time等列。我想为每次旅行的最后一次出发时间(在具有最大停止序列的元组中)设置空值 我能想到的最明显的方法是这样一个查询: UPDATE StopTimes AS A SET departure_time = NULL WHERE NOT EXISTS ( SELECT * FROM StopTimes B WHERE
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(选择stop\u sequence…WHERE trip\u 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语句中更新的表上放置别名 但是,您可以重命名子查询中的任何其他表,因此表名仍然是明确的:
UPDATE StopTimes
SET departure_time = NULL
WHERE NOT EXISTS
(
SELECT 1 FROM StopTimes AS B
WHERE B.stop_sequence > StopTimes.stop_sequence
)