在 oracle sql 中加入更新

Posted

技术标签:

【中文标题】在 oracle sql 中加入更新【英文标题】:update with join in oracle sql 【发布时间】:2019-12-07 13:46:59 【问题描述】:

我想更新 table1 的列,但我应该只更新另一个表中条件为真的记录 类似这样的东西,但我不知道如何在 Oracle SQL 中实现这个目的

update table1
join table2 on table1.msg_id = table2.id
set table1.index = table1.index-1
where table1.index > 10 and table2.type = 'myType'

【问题讨论】:

【参考方案1】:

我会将其写为任何数据库中的exists 子查询:

update table1 t1
    set index = t1.index - 1
where table1.index > 10 and
      exists (select 1
              from table2
              where t2.id = t1.msg_id and
                    t2.type = 'myType'
             );

join 表示您将在table1 的更新中使用来自table2 的数据。相反,您只想在满足特定条件时更改一行中的值。

【讨论】:

【参考方案2】:

Oracle 不支持这种语法(叹气)。

对于您的用例,您可以使用带有相关子查询的 not exists 条件:

update table1
set table1.index = table1.index - 1
where 
    table1.index > 10
    and exists (
        select 1 from table2 where table1.msg_id = table2.id and table2.type = 'mytype'
    )

注意:让您的生活更轻松,不要使用index 作为列名。这是几乎所有 RDBMS 中的保留工作。

【讨论】:

以上是关于在 oracle sql 中加入更新的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle SQL SELECT 语句中加入条件

在 oracle sql developer 中加入查询快,在 odp.net 中超慢

在 Oracle SQL Query 中加入(INNER JOIN)本地 Excel 表 - VBA

在 oracle 中加入大量表

在 oracle 中加入时态表

如何向一个oracle表中快速插入很多条数据