日期:2014-05-17 浏览次数:20976 次
--下面的条件是限制用的,以防止没有关联上的数据被更新成空的 --select b.bbb from b where a.id=b.id 查询出的结果可能是null,就是没有关联的数据 --exists 就是防止这样的情况还去更新的 ---你自己做几条数据试一下就明白了
------解决方案--------------------
自己造数据,执行两遍 看结果有什么区别就知道了。
------解决方案--------------------
[TEST@myoracle] SQL>CREATE TABLE A(ID INT,aaa VARCHAR2(10));
表已创建。
[TEST@myoracle] SQL>CREATE TABLE B(ID INT,bbb VARCHAR2(10));
表已创建。
[TEST@myoracle] SQL>INSERT INTO A VALUES(1,'我是1');
已创建 1 行。
[TEST@myoracle] SQL>INSERT INTO A VALUES(2,'我是2');
已创建 1 行。
[TEST@myoracle] SQL>INSERT INTO A VALUES(3,'我是3');
已创建 1 行。
[TEST@myoracle] SQL>INSERT INTO B VALUES(1,'我不是1');
已创建 1 行。
[TEST@myoracle] SQL>SELECT * FROM A;
ID AAA
---------- ----------
1 我是1
2 我是2
3 我是3
[TEST@myoracle] SQL>SELECT * FROM B;
ID BBB
---------- ----------
1 我不是1
[TEST@myoracle] SQL>UPDATE A
2 SET A.AAA =
3 (SELECT B.BBB FROM B WHERE A.ID = B.ID)
4 WHERE EXISTS (SELECT 1 FROM B WHERE B.ID = A.ID);
已更新 1 行。
[TEST@myoracle] SQL>SELECT * FROM A;
ID AAA
---------- ----------
1 我不是1
2 我是2
3 我是3
[TEST@myoracle] SQL>SELECT * FROM B;
ID BBB
---------- ----------
1 我不是1
[TEST@myoracle] SQL>DROP TABLE A;
表已删除。
[TEST@myoracle] SQL>DROP TABLE B;
表已删除。
[TEST@myoracle] SQL>CREATE TABLE A(ID INT,aaa VARCHAR2(10));
表已创建。
[TEST@myoracle] SQL>CREATE TABLE B(ID INT,bbb VARCHAR2(10));
表已创建。
[TEST@myoracle] SQL>INSERT INTO A VALUES(1,'我是1');
已创建 1 行。
[TEST@myoracle] SQL>INSERT INTO A VALUES(2,'我是2');
已创建 1 行。
[TEST@myoracle] SQL>INSERT INTO A VALUES(3,'我是3');
已创建 1 行。
[TEST@myoracle] SQL>INSERT INTO B VALUES(1,'我不是1');
已创建 1 行。
[TEST@myoracle] SQL>SELECT * F