如何将列从一个表复制到另一个可以通过 ID 连接的表


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)

最新更新