oracle在使用update语句时只能修改一张表里的内容,所以update 子句后只能有一个表名,所以这条语句显然不对。应该为如下形式:
UPDATE T1
SET T1.id = 
(
SELECT TableA.id 
  FROM (SELECT T2.F1, T2.F2, T2.F3, T2.F4, T3.id FROM T2,T3 where T2.name = T3.name) AS TableA
  WHERE T1.F1=TableA.F1
    AND T1.F2=TableA.F2
    AND T1.F3=TableA.F3
    AND T1.F4=TableA.F4
)