从一个表到另一个表的Oracle SQL更新会引发语法错误

时间:2015-01-29 06:19:21

标签: sql oracle

从一个表到另一个表的Oracle SQL更新会引发语法错误,以便进行简单的更新查询。

UPDATE Sales_Import SI
SET AccountNumber = RAN.AccountNumber
FROM RetrieveAccountNumber RAN
WHERE RAN.LeadID = SI.LeadID; 

错误:

Error starting at line 1 in command:
Error at Command Line:2 Column:37
Error report:
SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"

我相信同样的查询可以在postgres等其他数据库中使用。

任何人都可以告诉正确的查询吗?

和我试过的是这个ANSI标准查询?

3 个答案:

答案 0 :(得分:2)

  

和我试过的是这个ANSI标准查询?

没有。 Oracle Oracle不支持加入更新语句。

在Oracle中,您可以通过两种方式实现 -

**合并声明**

在合并声明中仅包含更新子句

MERGE INTO sales_import s   
USING (SELECT * 
       FROM   retrieveaccountnumber) u 
ON (u.leadid = s.leadid) 
WHEN matched THEN 
  UPDATE SET u.accountnumber = s.accountnumber; 

相关查询

UPDATE sales_import t1
   SET accountnumber  = (SELECT t2.accountnumber  
                         FROM retrieveaccountnumber t2
                        WHERE t1.leadid = t2.leadid )
 WHERE EXISTS (
    SELECT 1
      FROM retrieveaccountnumber t2
     WHERE t1.leadid = t2.leadid );

答案 1 :(得分:2)

我会写这样的sql:

UPDATE Sales_Import SI
SET AccountNumber = (Select RAN.AccountNumber
                 FROM RetrieveAccountNumber RAN
                 WHERE RAN.LeadID = SI.LeadID); 

答案 2 :(得分:0)

您可以通过加入这些表来完成此操作:

UPDATE SI
SET AccountNumber = RAN.AccountNumber
FROM RetrieveAccountNumber RAN
JOIN Sales_Import SI ON RAN.LeadID = SI.LeadID;