Oracle中多表联合更新处理方法详解

来源:互联网 发布:一个直播软件多少钱 编辑:程序博客网 时间:2024/06/06 20:43
ORACLE中多表关联更新与SQL Server和MYSQL的语法稍有不同,现将ORACLE中多表关联更新的几种方法处理如下:

一、创建测试表和添加测试数据
CREATE TABLE t_test01(
user_id varchar2(20) primary key,
user_name varchar2(10),
remark varchar2(100) default null
);

INSERT INTO t_test01
SELECT '1001','jiajia','你好啊' FROM dual
UNION ALL
SELECT '1002','maimai','' FROM dual
UNION ALL
SELECT '1003','yangyang','' FROM dual
UNION ALL
SELECT '1004','qianqian','' FROM dual
UNION ALL
SELECT '1005','huahua','' FROM dual;
COMMIT;

SELECT * FROM t_test01

CREATE TABLE t_test02(
user_id varchar2(20),
user_name varchar2(10),
address varchar2(100) default null
)


INSERT INTO t_test02
SELECT '1002','xiaoyue','' FROM dual
UNION ALL
SELECT '1003','chengzi','' FROM dual
UNION ALL
SELECT '1004','lili','' FROM dual;
COMMIT;


SELECT * FROM t_test01;
SELECT * FROM t_test02;

 

二、更新处理方法
1、采用更新内嵌视图集的处理
UPDATE (
SELECT a.user_name,b.user_name AS user_name01
FROM t_test01 a,t_test02 b
WHERE a.user_id=b.user_id
)
SET user_name=user_name01;
COMMIT;

--但是在执行时报如下错误:
ORA-01779:无法修改与非键值保存表对应的列,如图所示:

Oracle中多表联合更新处理方法详解

错误说明:子查询的结果中,更新数据源(t_test02)的内容不唯一,导致被更新对象(t_test01)中的一行可能对应数据源(t_test02)中的多行。

该解决过程:
--1.去重后创建唯一索引
CREATE UNIQUE INDEX t_test02_idx ON t_test02(user_id);
在创建唯一索引之后,就可以执行更新处理了。

SELECT * FROM t_test01;

--2.强制 Oracle 执行,方法是加上 BYPASS_UJVC 注释
UPDATE (
SELECT a.user_name,b.user_name AS user_name01
FROM t_test01 a,t_test02 b
WHERE a.user_id=b.user_id
)
SET user_name=user_name01;
COMMIT;


2、采用MERGE INTO 实现更新
MERGE INTO t_test01 a
USING t_test02 b
ON (a.user_id=b.user_id)
WHEN MATCHED THEN
  UPDATE SET a.user_name=b.user_name;
  COMMIT;

3、采用Oracle常规更新
UPDATE t_test01  a
SET a.user_name=(SELECT user_name FROM  t_test02 b WHERE a.user_id=b.user_id)
WHERE EXISTS (SELECT 1 FROM t_test02 b WHERE a.user_id=b.user_id);
COMMIT;


二、结果分析和建议

方法1的更新处理速度相对较快些;
方法3的更新处理速度相对较慢,平时使用中一般建议使用第一种,第二种方法。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一年内扣满12分怎么办 汽车违章扣12分怎么办 公租房3年到期怎么办 社保晚交了几天怎么办 大便完后肛门痒怎么办 宝宝鼻屎堵住了怎么办 吃饭吃撑了难受怎么办 御宅伴侣很卡怎么办 qq登录后未响应怎么办 微信安装包损坏怎么办 酷狗音乐想退款怎么办 手机qq影音闪退怎么办 胃疼超过24小时怎么办 小米4s无法开机怎么办 微信语音不好听怎么办 微信语音太难听怎么办 苹果x耳机用不了怎么办 10个月幼儿便秘怎么办 太阳晒了长斑怎么办 膀胱癌复发5回了怎么办 右肾囊肿有1cm,怎么办, 牙侧面有小小洞怎么办 喝酒喝的手抖怎么办 孩子在幼儿园不爱说话怎么办 孕妇吃了方头鱼怎么办 油炸的东西软了怎么办 跑步小腿疼怎么办 知乎 健身后小腿粗了怎么办 背心式内衣大了怎么办 运动文胸买大了怎么办 喝碳酸饮料胖了怎么办 奥鹏学费迟交了怎么办 侧乌鸦做不起来怎么办 发烧很难受怎么办 知乎 上班后奶水越来越少怎么办 孕晚期胖的厉害怎么办 怀孕后猛长胖怎么办啊 怀孕坐了按摩椅怎么办 怀孕8个月胎位不正怎么办 缓刑期间被打了怎么办 非法集资人跑了怎么办