表1 列的数据表1:ID,名称要更新考虑表2
表2 列:ID,状态。
如何提出请求更新Table1.name为Table1.id ='some_id'如果Table2.id = Table1.id和Table2.status ='some_status'?
在此先感谢。
表1 列的数据表1:ID,名称要更新考虑表2
表2 列:ID,状态。
如何提出请求更新Table1.name为Table1.id ='some_id'如果Table2.id = Table1.id和Table2.status ='some_status'?
在此先感谢。
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');
的存在任何行的子查询存在关键字测试的东西。 如果未找到行,则答案为FALSE。否则,子查询 返回TRUE。 NOT EXISTS反转结果。
注意整个子查询被执行,即使需要EXISTS仅 知道子查询是否不返回任何行 - 因此,使用与返回大量行的子查询EXISTS提防 。
值得注意的是,这种查询有时被称为 “半连接”。 semijoin是一个SELECT语句,它使用EXISTS 关键字将表中的行与另一个表中的行进行比较。
除了它的被用于表1的每一行执行相关查询。
在许多情况下,EXISTS可能会取代IN,而且通常比IN更有利。
尝试这样
update table1
set table1.name = 'newName'
FROM table1 inner join table2 on table1.id = table2.id
where table2.status = 1enter code here
为什么你需要在一个单独的表?它是否适用于具有“id,name,status”列的单个表格? – carlosherrera 2014-10-30 14:46:30
表格的结构不能改变。 – slider 2014-10-30 14:48:42
看看这个[问题](http://stackoverflow.com/questions/224732/sql-update-from-one-table-to-another-based-on-a-id-match)。 – programmer43229 2014-10-30 14:51:12