表1 columns:id,name
表2 列:id,status。
如何为Table1.id =' some_id'提出更新Table1.name 的请求如果Table2.id = Table1.id和Table2.status =' some_status' ?
提前致谢。
答案 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