Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有条件的相关子查询的SQLite更新语法_Sql_Sqlite_Gtfs - Fatal编程技术网

具有条件的相关子查询的SQLite更新语法

具有条件的相关子查询的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

我正在处理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 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
)