ITPub博客

首页 > 数据库 > Oracle > 关于UPDATE(转贴)

关于UPDATE(转贴)

原创 Oracle 作者:chinazjq 时间:2007-09-26 10:43:09 0 删除 编辑

今天给一个同事调试SQL,做个记录。

CREATE TABLE TEST1(ID VARCHAR2(20) NOT NULL PRIMARY KEY,
MC VARCHAR2(60));

CREATE TABLE TEST2(ID VARCHAR2(20) NOT NULL PRIMARY KEY,
MC VARCHAR2(60));

INSERT INTO TEST1 VALUES('1','1-11111');
INSERT INTO TEST1 VALUES('2','1-22222');
INSERT INTO TEST1 VALUES('3','1-33333');

INSERT INTO TEST2 VALUES('1','2-11111');
INSERT INTO TEST2 VALUES('2','2-22222');

UPDATE (SELECT A.MC MCA,B.MC MCB FROM TEST1 A,TEST2 B WHERE A.ID=B.ID) SET MCA=MCB;

/*
2 rows updated

这个写法要求TEST2表要有主建,否则SQL无法执行!

ORA-01779: 无法修改与非键值保存表对应的列
*/

SELECT * FROM TEST1;

/*

ID MC
-------------------- -------------------
1 2-11111
2 2-22222
3 1-33333

*/

ROLLBACK;

UPDATE TEST1 A SET MC = (SELECT MC FROM TEST2 B WHERE A.ID=B.ID) WHERE EXISTS (SELECT ID FROM TEST2 B WHERE A.ID=B.ID);

/*
2 rows updated
如果不加后边的where则是update 3条数据的
*/

SELECT * FROM TEST1;

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9723916/viewspace-972463/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 学习纪录
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    9
  • 访问量
    156824