根据另一个表中的值更新表中的值[重复]

Posted

技术标签:

【中文标题】根据另一个表中的值更新表中的值[重复]【英文标题】:Update a value in a table based on a value in another table [duplicate] 【发布时间】:2013-06-22 21:46:30 【问题描述】:

是否可以根据 Oracle 中另一个表中的值更新表中的值?

我正在尝试完成这样的事情(我知道这不是正确的 UPDATE 语句):

  UPDATE table1 
   SET table1.flag = 1 
  FROM table1 t1 
 INNER JOIN table2 t2
    ON t1.emp_id = t2.emp_id 
 INNER JOIN table3 t3
   ON t2.company = t3.company
 WHERE t1.emp_id = '5632'
   AND l2.company = '83CP'
   AND t1.code = 'LIEU'

【问题讨论】:

@Ben 这不是重复的。在那个问题中,他们想用另一个表中的值更新该字段。我想根据另一个表中的值进行更新(作为条件的一部分) 这是一个完全相同的 Azzi,答案中提出的所有解决方案都将以完全相同的方式工作。无论您是设置“标志”还是使用列进行更新都没有关系。我会使用 MERGE 选项,因为我发现更容易理解发生了什么。 @Ben 问题不一样;答案是否相同。 您正在争论用另一列的值或常量更新一列是否相同?到目前为止,我是唯一一个投票决定关闭的人,您可以完全忽略我,但是,您得到的任何答案都将是相同,因为它不会是update set a.column = b.column,而是update set a.column = 1。如果您不同意这些是相同的,那是您的特权;但是,我希望您能够将代码应用于您自己的查询。如果不能,您可能需要考虑根据您遇到的问题更新您的答案。 【参考方案1】:

我希望你在 table1 中有一个主键,所以使用它而不是 rowid 但如果你还没有使用

update table1
set flag =1
where rowid in ( select t1.rowid
                 FROM table1 t1 
                      INNER JOIN table2 t2 ON t1.emp_id = t2.emp_id 
                 INNER JOIN table3 t3 ON t2.company = t3.company
                 WHERE t1.emp_id = '5632'
                       AND l2.company = '83CP'
                       AND t1.code = 'LIEU'              
               )

【讨论】:

以上是关于根据另一个表中的值更新表中的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

根据另一个表中的值插入和/或更新记录

Oracle 删除表中的重复行并使用另一个表中的值更新行

根据另一个表中的值更新视图

如何根据另一个表中的值创建重复记录

更新查询以根据另一表中的值更改一个表中列的现有值

如何根据与另一个表中的值的比较来更新列