在Oracle中怎样用一张表去Update另一张表
发布网友
发布时间:2022-04-08 00:27
我来回答
共4个回答
热心网友
时间:2022-04-08 01:56
这是一个经典的问题,太多的理论不说了,我直接举个例子吧。
两张表T_USER(用户信息表),T_NAME_MAP(新老姓名映射表)
T_USER的字段:USER_ID,USER_NAME,USER_INFO;
T_NAME_MAP的字段:USER_ID,NEW_NAME;
具体语句:
UPDATE T_USER A SET A.USER_NAME = (SELECT B.NEW_NAME FROM T_NAME_MAP B WHERE A.USET_ID = B.USER_ID)
WHERE EXISTS (SELECT 1 FROM T_NAME_MAP C WHERE A.USER_ID = C.USER_ID );
特别提醒:
1、如果T_USER表中的一个USER_ID在T_NAME_MAP 表中存在两条以上的记录,则该语句会报错。因为Oracle是无法辨别你要“更新”哪一条的。当然,从纯技术的角度来看,这种情况也是可以处理的,你可以在B.NEW_NAME 上加一个函数,如MAX(B.NEW_NAME ).
2、WHERE EXISTS 语句绝对不可以省略,有了这个子句,才能实现“一对一”的批量更新,否则会报错“返回多行”了。
以上,希望可以对你有所帮助,共同提高。
热心网友
时间:2022-04-08 03:14
应该用merge语句(oracle 10g或以上),它是update和insert的组合.
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE SET a.status = b.status
WHEN NOT MATCHED THEN
INSERT (object_id, status)
VALUES (b.object_id, b.status);
热心网友
时间:2022-04-08 04:49
update table1 set (A,B,C)= (select A,B,C from table2)百度地图
本数据来源于百度地图,最终结果以百度地图最新数据为准。
热心网友
时间:2022-04-08 06:40
update a set c1 = select c2 from b where b.id = a.id