正常思路:
UPDATE T1 SET T2.A=
(SELECT T2.A FROM T2
WHERE T1.B=T2.B)
但是这样运行之后会报错:
ORA-01427: single-row subquery returns more than one row
就是返回的值太多了,可能其中会包含一些重复行的值。
这个时候需要增加一个附加条件:
ROWNUM<2
即:
UPDATE T1 SET T2.A=
(SELECT T2.A FROM T2
WHERE T1.B=T2.B AND ROWNUM<2))
如果说T1的A列中的值全都包含在T2的B列,那么以上语句即可适用,但是如果T1中的B列还包括其他不属于T2的B列的值,那么还需要多加一个WHERE子句,即:
UPDATE T1 SET T2.A=
(SELECT T2.A FROM T2
WHERE T1.B=T2.B AND ROWNUM<2)
WHERE EXIST
(SELECT 1 FROM T2
WHERE T1.B=T2.B AND ROWNUM<2)
这个子句能够保证只修改T2中存在的对应A值。