0
好吧,我在这个论坛上尝试了几乎所有的解决方案,但无法使其工作。我总是得到语法错误。而不是加载数据和手动做肮脏的工作,我试图通过只运行SQL更新查询来查看是否可以做到这一点。SQLite:内部加入的复杂更新报告
我有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
现在,我得到的“内部”和“加盟”的错误。我遇到“。”错误。为tablename.fieldname。我试着在JOIN之前放置SET,它不起作用。我认为这可能是SQLite的限制,它不能支持更新查询中的连接。
其他建议?
在这种情况下,如果不存在满足WHERE条件多效应,都将在同一人物多次更新? – larienna 2014-12-08 14:21:30
不,它会失败,并显示一个消息,指出需要一个标量值,但返回多个值(或其他值)。您必须确保内部'SELECT'语句只返回一行,或者通过选择UNIQUE索引或PRIMARY KEY,或者通过汇总结果(例如'MAX(HP)')或限制结果(例如'LIMIT 1')。 – 2014-12-08 14:24:07