oracle sql - 根据另一个属性值更新同一个表

Posted

技术标签:

【中文标题】oracle sql - 根据另一个属性值更新同一个表【英文标题】:oracle sql - update same table based on another attribute value 【发布时间】:2015-06-04 00:11:07 【问题描述】:

我在 oracle 中有一个表,它有 4 个属性,具有以下值

attribute_a       attribute_b    attribute_c     attribute_d

      abcd1                 1              0
      abcd1                 2              1
      abcd1                 3              0

       def1                 1              1
       def1                 2              1

我想根据attribute_c中的值将带有“逻辑与”值的attribute_d更新为attribute_d 即对于 abcd1,逻辑 AND 为 0。我想用属性_d 中 abcd1 的值 0 更新表 对于def1,我想用def1 的attribute_d 中的值1 更新表。我可以使用 MERGE 来完成此操作吗?如果有人可以给我一个查询,我将不胜感激。

【问题讨论】:

你的意思是按位而不是。 为什么要更新表?像这样存储计算值通常是个坏主意。 (数据不一致...)改为创建一个视图,该视图始终具有新的 attribute_d 值,即使在其他列已更新之后也是如此。 (如果您确实必须存储 attribute_d 值,请使用触发器来处理它的更新。) 【参考方案1】:

首先,我同意 @jarlh 关于存储计算值的评论。

解决方案:

UPDATE [TableName]
SET attribute d = (CASE WHEN attribute_b = attribute c THEN 1 ELSE 0 END)

【讨论】:

以上是关于oracle sql - 根据另一个属性值更新同一个表的主要内容,如果未能解决你的问题,请参考以下文章

Oracle PL/SQL:如何根据同一记录的 ID 字段返回字符串值?

根据另一列的另一个值和/或另一行中的同一列更新设置值:-ORA 1427

Oracle SQL 更新集

oracle 把一个字段的值更新另一个字段。

如何根据oracle中另一个表中的值更新一个表中的字段[重复]

SQL同一个表的某字段值相加赋值给另一个字段