2017-12-02 332 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」很容易打字。 –