UPDATE s
SET s.TECH_NAME = r1.TECH_NAME
FROM **ERRMSG** s INNER JOIN **RAWDATA** r1 on
s.id = r1.id;
我想从表 RAWDATA 更新表 ERRMSG 中的tech_name。连接条件是 ID.上面查询中出了什么问题。我收到以下错误
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:
听起来像是这里记录的 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 的其他功能;例如,当不匹配时,errmsg 表中的 id 在原始数据表中没有相应的 id。在这种情况下,您也想采取行动吗?例如,您可以将tech_name设置为 NULL 或某个默认值,或者完全删除该行 - 您可以在一个 MERGE 语句中执行所有这些操作。请参阅我提供的文档。
问题是你使用的语法是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)