【问题标题】:SQL: error with inner join in an updateSQL:更新中的内部联接错误
【发布时间】:2017-12-02 17:41:12
【问题描述】:

我在我的请求中找不到问题。这是我的请求和 2 表:

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);

【问题讨论】:

  • 您是仅突出显示第一行还是在第一行之后错过了;
  • 我并没有真正理解突出显示第一行的意思,但是内部连接在 Select 例如中非常有效。和;应该在最后吧?
  • 我认为它不允许您UPDATE 加入。它在表名之后寻找 SET 关键字,通常在执行简单的 UPDATE...
  • @PatJones 是的,我也这么认为,但我不知道 oracle 中更新内部连接的语法(我认为该结构在 MYsql 中有效)
  • @PatJones 没关系,我刚刚找到它,我用解决方案编辑帖子!

标签: sql oracle sql-update inner-join


【解决方案1】:

Oracle 在update 中不支持join(至少是明确的)。你想做的等价物是:

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 很重要,如果您想处理不匹配的情况。

【讨论】:

  • 好吧,我明白了!但在我的情况下,他们不能有一个不在客户端中的 numcl,所以我不需要把它放在正确的位置?而exists中select后的'1'有什么用?
  • @Rotciv 。 . .如果您不需要检查匹配项,则不需要。我只是指出 Oracle 中的等效语法。 select 后面的内容并不重要; “1”很容易输入。
猜你喜欢
  • 2012-10-04
  • 2014-06-09
  • 2014-07-10
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2018-06-25
相关资源
最近更新 更多