考虑table2的数据来更新table1

时间:2014-10-30 14:43:56

标签: sql oracle sql-update

表1 columns:id,name

表2 列:id,status。

如何为Table1.id =' some_id'提出更新Table1.name 的请求如果Table2.id = Table1.id和Table2.status =' some_status' ?

提前致谢。

2 个答案:

答案 0 :(得分:1)

update Table1 set Table1.name = 'XXX'
where Table1.id = 'some_id' 
  and exists (select 1 from Table2 where Table2.id = Table1.id and Table2.status = 'some_status');
  

EXISTS关键字测试子查询中是否存在任何行。   如果没有找到行,则答案为FALSE。否则,子查询   返回TRUE。 NOT EXISTS反转结果。

     

请注意,即使需要EXISTS,也会执行整个子查询   只知道子查询是否返回任何行 - 所以要小心   将EXISTS与返回大量行的子查询一起使用。

     

值得注意的是,这种查询有时也被称为   一个“半连接”。 semijoin是一个使用EXISTS的SELECT语句   用于比较表中的行与另一个表中的行的关键字。

除此之外,它是一个相关查询,它正在为Table1的每一行执行。

EXISTS在许多情况下可能取代IN,并且通常比IN更有益。

答案 1 :(得分:0)

尝试这样的事情

update table1
set table1.name = 'newName'
FROM table1 inner join table2 on table1.id = table2.id
where table2.status = 1enter code here

https://social.msdn.microsoft.com/Forums/pt-BR/00d52cb2-829a-4749-aa4c-b9552405345e/update-com-inner-join