我想更新我的桌子,让所有人的活动持续太久。更新应该纠正一次,对于后续行我需要处理新结果。所以想到像
这样的东西UPDATE summary_table st
SET st.screen_on=newScreenOnValue
st.active_screen_on=st.active_screen_on-(st.screen_on-newScreenOnValue) --old-value minus thedifference
FROM (
SUB-SELECT with rowid, newScreenOnValue ... JOIN ... WHERE....
) nv
WHERE (st.rowid=nv.rowid)
我知道我可以通过重新运行相同的查询直接更新第一个和第二个值。但我的问题是subselect的成本似乎很高,因此想要避免双重更新。双重运行相同的查询。
以上SELECT
只是一种非正式的写作方式,我想我想得到的。我知道st
不起作用,但我把它留在这里以便更好地理解。当我尝试上面的语句时,我总是在FROM
结束的位置返回一个SyntaxError。
答案 0 :(得分:1)
这可以通过以下方式实现:
UPDATE summary_table st
SET (st.screen_on, st.active_screen_on) =
((SELECT newScreenOnValue, st.active_screen_on-(st.screen_on-newScreenOnValue)
FROM ...
JOIN...
WHERE..))
[WHERE if any additional condition required];
上面的查询在informix上完成了很好的尝试和测试,直到您在FROM,JOIN,WHERE子句中出现任何错误。
干杯!
答案 1 :(得分:0)
语法错误,因为您正在更新的第一列和第二列之间缺少逗号。
从不使用ROWID,它们是易失性的,默认情况下也不会与IDS一起使用,除非您指定。
为什么使用子查询?