Oralce 更新表:用T2表字段來更新T1表字段

  • 497
  • 0
  • DB
  • 2016-07-27

摘要:Oralce 更新表:用T2表字段來更新T1表字段

UPDATE A SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID) WHERE A.ID IN (SELECT ID FROM B);

UPDATE (SELECT A.NAME ANAME,B.NAME BNAME FROM A,B WHERE A.ID=B.ID)
SET ANAME=BNAME;

 
UPDATE tablea a SET a.fieldforupdate = (SELECT b.fieldsource FROM tableb b  WHERE a.keyfield = b.keyfield)  
WHERE EXISTS (SELECT b.fieldsource FROM tableb b   WHERE a.keyfield = b.keyfield)

有三点需要注意:

1. 对于一个给定的a.keyfield的值,SELECT b.fieldsource FROM tableb b WHERE a.keyfield = b.keyfield 的值只能是一个唯一值,不能是多值。

2. 在绝大多数情况下,最后面的where EXISTS子句是重要的,否则将得到错误的结果。

3. 对于视图更新的限制:

如果视图基于多个表的连接,那么用户更新(update)视图记录的能力将受到限制。除非update只涉及一个表且视图列中包含了被更新的表的整个主键,否则不能更新视图的基表。