今天给一个同事调试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;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/795108/viewspace-925151/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/795108/viewspace-925151/