insert into table a(a1,a2) select (b1,b2) from b ,这样操作的目的是想把列a1,a2, 插入到表b 的b1,b2 中,
如图所示:(a1,a2,a3 分别为表a 的三个列名)
a1      a2      a311 22 null
1 2 null
但是  再执行这样的操作时insert into a(a3) select d3 from d ,结果是这样的:
a1      a2      a311 22 null
1 2 null
null null a33
null null 22而我想要的结果是:
a1      a2      a3  
11 22 33
1 2 22我应该如何写? 我的目的就是想插入时 不让其他列产生空值,而是从第一行开始,高人指点!

解决方案 »

  1.   

    修改一下, 这样太乱了
    insert into table a(a1,a2) select (b1,b2) from b ,这样操作的目的是想把列a1,a2, 插入到表b 的b1,b2 中, 
    如图所示:(a1,a2,a3 分别为表a 的三个列名) 
    a1      a2      a3 11      22     null 
    1        2     null 
    但是  再执行这样的操作时insert into a(a3) select d3 from d ,结果是这样的: 
    a1      a2      a3 11      22      null 
    1        2      null 
    null    null    a33 
    null    null     22 而我想要的结果是: 
    a1      a2      a3  
    11      22      33 
    1        2      22 
      

  2.   

    你不指定其他列的值,ORACLE怎么给你插值?
    UPDATE好了。
      

  3.   

    我应该如何写? 我的目的就是想插入时 不让其他列产生空值,而是从第一行开始,高人指点!
    --------------------------------------------
    关系数据库中的数据是无序的,没有“第一行”的概念。
    楼主需要学习一下关系数据库和SQL的基础知识。
      

  4.   

    楼上教训的是
    update a set a3=(select d3 from d)
     为什么这样写不对啊,如何写表示更新列a3 呢?
      

  5.   

    试试这个:insert into a(a1, a2, a3)
    select x.b1, x.b2, y.b3 from 
        (select rownum rn, b1, b2 from b) x 
        full outer join 
        (select rownum rn, d3 from d) y 
        on x.rn = y.rn
      

  6.   

    谢谢楼上,但是我想用update 实现,高人们指点一下啊
      

  7.   

    先insert into table a(a1,a2) select (b1,b2) from b 
    然后update a set a3 =(select d3 from d) where a1=a1
      

  8.   

    DROP TABLE a;
    DROP TABLE b;
    CREATE TABLE a(a1 INT,a2 INT,a3 INT);
    --ALTER TABLE a ADD CONSTRAINT pk_a PRIMARY KEY(a1);
    CREATE TABLE b(d3 INT);
    INSERT INTO a VALUES(11,22,NULL);
    INSERT INTO a VALUES(1,2,NULL);
    INSERT INTO b VALUES(33);
    INSERT INTO b VALUES(22);
    COMMIT;
    SELECT * FROM a;
    SELECT * FROM b;
    UPDATE A
       SET A.A3 = (SELECT Y.D3
                     FROM (SELECT ROWID RID, ROWNUM RN FROM A) X,
                          (SELECT D3, ROWNUM RN FROM B) Y
                    WHERE X.RN = Y.RN
                      AND X.RID = A.ROWID)
     WHERE EXISTS (SELECT Y.D3
              FROM (SELECT ROWID RID, ROWNUM RN FROM A) X,
                   (SELECT D3, ROWNUM RN FROM B) Y
             WHERE X.RN = Y.RN
               AND X.RID = A.ROWID);
               
    SELECT *FROM a;
    输出:
    A1 A2 A3
    11 22 33
    1   2   22