2017-12-02 323 views
0

我不能发现我的请求,问题误差内加盟。这里是我的要求和2台:SQL:在更新

UPDATE RESERVATION inner join client on reservation.numcl = client.numcl 
SET reservation.numcl2 = client.numcl2; 

错误:

=> [42000][971] ORA-00971: missing SET keyword 
  1. 表客户 Client table

  2. 预订客户 reservation table

解决办法:

UPDATE RESERVATION SET reservation.numcl2 = (select client.NUMCL2 
              from CLIENT 
              where client.NUMCL= RESERVATION.numcl); 
+0

你是在第一行之后突出显示第一行还是错过了';'? – Hans

+0

我并没有真正明白你的意思,突出显示了第一行,但内部连接在选择实例中工作得很好。而且;应该在最后的权利? – Rotciv

+0

我认为它不允许你“更新”一个连接。它正在寻找表名后面的'SET'关键字,当它执行一个简单的'UPDATE'时,它通常会出现...... –

回答

0

Oracle不支持在updatejoin(至少明确地)。你想要做什么的等效是:

UPDATE RESERVATION r 
    SET numcl2 = (select client.NUMCL2 
        from CLIENT c 
        where c.NUMCL = r.numcl 
       ) 
    WHERE EXISTS (SELECT 1 FROM client c WHERE c.NUMCL = r.numcl); 

exists是很重要的,如果你想处理在没有比赛的案件。

+0

好吧,我明白了!但在我的情况下,他们不能在预留数量不在客户端,所以我不需要把它放在正确的?在存在选择之后,'1'的用法是什么? – Rotciv

+0

@Rotciv。 。 。如果你不需要检查比赛,那么你不需要。我只是指出Oracle中等效的语法。 “选择”后面的内容并不重要; “1”很容易打字。 –