UPDATE s
SET s.TECH_NAME = r1.TECH_NAME
FROM **ERRMSG** s INNER JOIN **RAWDATA** r1 on
s.id = r1.id;
我想从表 RAWDATA 更新表格中的tech_name ERRMSG .Joining条件为ID.Whats在上述查询中出错。我收到以下错误
Error at Command Line : 62 Column : 1
Error report -
SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
答案 0 :(得分:0)
错误的是您使用的是Oracle不支持的语法。改为使用相关子查询:
UPDATE errmsg s
SET s.TECH_NAME = (SELECT r1.TECH_NAME FROM rawdata r1 WHERE s.id = r1.id)
WHERE EXISTS (SELECT 1 FROM rawdata r1 WHERE s.id = r1.id)
答案 1 :(得分:0)
这听起来像是这里记录的MERGE声明的工作: https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm
这更符合您尝试做的精神,它避免了相关的子查询,并且它为您提供了更大的灵活性。
merge into errmsg s
using rawdata r1
on (s.id = r1.id)
when matched then update set s.tech_name = r1.tech_name
如果需要,您也可以使用MERGE的其他功能;例如,当NOT匹配时,errmsg表中的id在rawdata表中没有对应的id。你想在这种情况下采取行动吗?例如,您可以将tech_name设置为NULL或某个默认值或完全删除该行 - 您可以在一个 MERGE语句中执行所有这些操作。请参阅我提供的文档。