gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:26:03 24 4
gpt4 key购买 nike

我在 SQLite 数据库中处理 GTFS 数据。我有一个 StopTimes 表,其中包含列 trip_id、stop_sequence 和 departure_time(以及其他列)。我想将每次旅行的最后一次 departure_time(在具有最大 stop_sequence 的元组中)设为 null。

我能想到的最明显的方法是这个查询:

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:靠近“AS”:语法错误”,并且 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 查询的子查询中引用外表的属性?有什么方法可以重新制定我的查询来绕过这个限制吗?

最佳答案

您不能在 UPDATE 语句中更新的表上放置别名。

但是,您可以在子查询中重命名任何其他表,因此表名仍然是明确的:

UPDATE StopTimes
SET departure_time = NULL
WHERE NOT EXISTS
(
SELECT 1 FROM StopTimes AS B
WHERE B.stop_sequence > StopTimes.stop_sequence
)

关于带条件的相关子查询的 SQLite 更新语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23614106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com