update (
select test1.name as a1,
test2.name as a2 from test1 left join test2 test1.id=test2.id ) set a1 =a2
以前 代码 是不 是 把 test1 里面 的 name 字段的值 更新 成为 test2里的name 字段的值
解决方案 »
- 为什么用plsql查询的结果不能自动对齐呀?
- 请教一个SQL语句(not in)
- 问一个分类统计的SQL语句
- 问一个oracle的问题,某列的值如果相同只返回一条记录?这样的oracle怎么写?
- 如何实现跨平台使用Oracle和Sybase数据库?
- oracle 与 sqlServer 中 select 语句的差异 出现的问题?
- 新手问几个简单问题。讲的细一些,分有都是。
- 怎样在SQLPLUS命令行中查看某个 TABLESPACE的DATAFILES?
- 如何获取数据库中2分钟内写入的所有记录呢
- 请问Oracle里的自动增加字段是哪个?
- create any outline是什么权限?
- oracle操作符泄漏
create table test1(id number,name varchar2(20));
create table test2(id number,name varchar2(20));
insert into test1 values(1,'jiabo');
insert into test1 values(2,'try');
insert into test2 values(1,'jiabo');
insert into test2 values(2,'try');insert into test1 values(4,'notequal');
insert into test2 values(5,'nothing');
commit;update (select t1.name a1,t2.name a2 from test1 t1 left join test2 t2 on t1.id=t2.id) set a1 =a2;
select t1.name a1,t2.name a2 from test1 t1 left join test2 t2 on t1.id=t2.id;
去执行下吧,看能否执行!!!
但这种写法必须要求test2中的id必须有唯一约束或主键约束,意即要保持唯一,否则会报错。
当然,如果没有唯一或主键约束,可以使用hint,bypass_ujvc,但不提倡,如:
UPDATE /*+bypass_ujvc*/ (SELECT test1.name AS a1, test2.name AS a2
FROM test1
LEFT JOIN test2
ON test1.id = test2.id)
SET a1 = a2;
常规写法是:
UPDATE test1 t
SET t.name =
(SELECT a.name FROM test2 a WHERE a.id = t.id)
WHERE EXISTS (SELECT 1 FROM test2 a WHERE a.id = t.id);