2014-10-30 57 views
0

表1 列的数据表1:ID,名称要更新考虑表2

表2 列:ID,状态。

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

在此先感谢。

+0

为什么你需要在一个单独的表?它是否适用于具有“id,name,status”列的单个表格? – carlosherrera 2014-10-30 14:46:30

+0

表格的结构不能改变。 – slider 2014-10-30 14:48:42

+1

看看这个[问题](http://stackoverflow.com/questions/224732/sql-update-from-one-table-to-another-based-on-a-id-match)。 – programmer43229 2014-10-30 14:51:12

回答

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'); 

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

注意整个子查询被执行,即使需要EXISTS仅 知道子查询是否不返回任何行 - 因此,使用与返回大量行的子查询EXISTS提防 。

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

除了它的被用于表1的每一行执行相关查询

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

+0

请为您的代码添加一些解释。仅有代码的答案有时足够好,但代码+解释答案总是更好 – Barranka 2014-10-30 15:49:30

+0

确切地说,这是必要的。谢谢! – slider 2014-10-31 10:18:15