Informix:UPDATE with SELECT - 语法?

时间:2013-07-17 13:39:09

标签: informix

我想更新我的桌子,让所有人的活动持续太久。更新应该纠正一次,对于后续行我需要处理新结果。所以想到像

这样的东西
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。

2 个答案:

答案 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)

  1. 语法错误,因为您正在更新的第一列和第二列之间缺少逗号。

  2. 从不使用ROWID,它们是易失性的,默认情况下也不会与IDS一起使用,除非您指定。

  3. 为什么使用子查询?