Welcome to oracle_awen's archive blog
这种情况主要是由于 set column =(···)  括号里面返回了多个值导致的,通过下面的例子大家可以看到唯一性约束的重要性啦。

SQL> select * from b2;

        ID NAME
---------- --------------------
         3 awen
         1 steven

SQL> select * from b1;

        ID NAME
---------- --------------------
         1 steven
         1 awen
         2 steven
         3 oracle

SQL> update b2 set name = (select name from b1 where b1.id=b2.id);
update b2 set name = (select name from b1 where b1.id=b2.id)
                      *
第 1 行出现错误:
ORA-01427: 单行子查询返回多个行

SQL> select name from  b1 where id = 1 ;

NAME
--------------------
steven
awen

显然是用问题的,set b2里面的name=2个值。


还有一种情况如下:
b1表中
SQL> select * from b1;

        ID NAME
---------- --------------------
         1 awen
         1 awen
         2 steven
         3 oracle
2条记录是相同的,这样我们可以用distinct来做

SQL> select * from b2;

        ID NAME
---------- --------------------
         3 awen
         1 steven

SQL> update b2 set name = (select distinct  name  from b1 where b1.id=b2.id);

已更新2行。

SQL> select * from b2;

        ID NAME
---------- --------------------
         3 oracle
         1 awen
添加评论

昵称 *

E-mail (防止垃圾信息,此栏留空)