使用Inner Join抛出语法错误更新

时间:2016-11-12 00:02:49

标签: sql informix

我想根据表B中的值更新表A中的列。使用以下格式,但会出现语法错误。

update TableA
set 
TableA.MOdule_id =TableB.MOdule_id 
from TableA
inner join 
TableB
on TableA.end_Slot_id =TableB.Slot_Id 
where TableA.Slot_Id = 'AAA';

如果有人可以提供帮助,那将是很有帮助的。

1 个答案:

答案 0 :(得分:3)

快速搜索" informix sql update"返回两个描述UPDATE命令语法的参考手册页。两者都没有表明支持非标准的FROM子句。

标准SQL使用相关子查询来实现此目的。您的查询应该类似于

update TableA
set MOdule_id =
    (select TableB.MOdule_id
     from TableB
     on TableA.end_Slot_id = Slot_Id)
where Slot_Id = 'AAA'
and exists (
     select 1
     from TableB
     on TableA.end_Slot_id = Slot_Id
     and TableA.Slot_Id = 'AAA'
);

EXISTS子句确保只有B中存在的行才会应用于A.如果没有它,任何丢失的行都将更新为NULL。