SQLite:具有内部联接的复杂更新语句

时间:2014-12-07 16:29:41

标签: sqlite join sql-update

好的,我在这个论坛上尝试了几乎所有解决方案而无法使其正常运行。我总是得到语法错误。我没有手动加载数据和执行脏工作,而是试图通过仅运行SQL更新查询来实现它。

我有2个表,一个包含字符,另一个包含活动效果。我只会显示重要的字段。

字符

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。

例如,根据上述数据," Duvack"因为他中毒,应该减掉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 

现在我在" INNER"和"加入"。我得到错误"。" for tablename.fieldname。我尝试在JOIN之前放置SET,但它不起作用。我认为它可能是SQLite的一个限制,它不支持在更新查询中加入。

还有其他建议吗?

1 个答案:

答案 0 :(得分:3)

SQLite不支持JOIN语句中的UPDATE

而是将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