SQLite:具有内部联接的复杂更新语句
好的,我在这个论坛上尝试了几乎所有的解决方案,但都无法成功。我总是遇到语法错误。我不想手动加载数据和做脏活,而是想看看是否可以只运行一个SQL更新查询来完成这项工作 我有两个表,一个包含字符,另一个包含活动效果。我将只显示重要的字段 字符SQLite:具有内部联接的复杂更新语句,sqlite,join,sql-update,Sqlite,Join,Sql Update,好的,我在这个论坛上尝试了几乎所有的解决方案,但都无法成功。我总是遇到语法错误。我不想手动加载数据和做脏活,而是想看看是否可以只运行一个SQL更新查询来完成这项工作 我有两个表,一个包含字符,另一个包含活动效果。我将只显示重要的字段 字符 pk name hp location 1 duvack 16 2 2 arielle 51 2 3 Larienna 47 2 效果 pk name HP target_id
pk name hp location
1 duvack 16 2
2 arielle 51 2
3 Larienna 47 2
效果
pk name HP target_id target_type
4 Paralyze 1 1
5 Seal 1 1
8 Blind 1 1
12 Insanity 1 1
14 Poison -1 1 1
Target_id是角色pk的“外键”。我试图做的是查询角色和效果,并对角色应用HP效果修饰符。因此,我基本上是通过加入绑定到角色的所有效果来更新角色hp,并使用效果hp修改角色hp
例如,根据上面的数据,“杜瓦克”应该会因为中毒而损失1点生命
因此,它应该给出如下查询:
UPDATE character
INNER JOIN effect ON character.pk=effect.target_id
SET character.hp = character.hp + effect.HP
WHERE effect.target_type=1 AND character.location = 2
现在我在“内部”和“连接”上出现错误。我在tablename.fieldname的“.”上出错。我尝试在联接之前放置集合,但它不起作用。我认为这可能是SQLite的一个限制,它不能支持在更新查询中加入
任何其他建议?SQLite不支持
UPDATE
语句中的JOIN
相反,将JOIN
替换为相关的SELECT
语句:
UPDATE character
SET hp =
(hp + (SELECT HP FROM effect WHERE effect.target_id = character.pk AND effect.target_type = 1))
WHERE character.location = 2
在这种情况下,如果存在满足WHERE条件的多个效果,它是否会多次更新同一字符?否,它将失败,并显示一条消息,说明需要一个标量值,但返回了多个值(或类似的内容)。您必须确保内部
SELECT
语句仅返回一行,方法是根据唯一索引或主键进行选择,或聚合结果(例如MAX(HP)
),或限制结果(例如LIMIT 1
)。