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:具有内部联接的复杂更新语句_Sqlite_Join_Sql Update - Fatal编程技术网

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

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

好的,我在这个论坛上尝试了几乎所有的解决方案,但都无法成功。我总是遇到语法错误。我不想手动加载数据和做脏活,而是想看看是否可以只运行一个SQL更新查询来完成这项工作

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

字符

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
)。