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