CREATE TABLE        TC        (CODE          CHAR(8)                 NOT NULL,
                                              AGE            NUMBER,
                                              STATE         CHAR(4)            DEFAULT       'a'     );
TABLE          QE (CODE,GRADE,STATE)TD 和QE中的CODE都是没有重复的,TC中的STATE均为 'a',当执行下面的更新语句时,没有被更新到的TC中的列,不再是'a'了,都变成了空值,这是怎么回事啊update TC SET(STATE)=(SELECT   B.STATE        FROM  QE  B WHERE   TC.CODE=QE.CODE);

解决方案 »

  1.   

    update TC SET(STATE)=(SELECT B.STATE FROM QE B WHERE TC.CODE=b.CODE)
     where exists(select 1 FROM QE c WHERE TC.CODE=c.CODE)
      

  2.   

    肯定啊,你现在是用''修改了'a'啊,
    default意思是,只有当你不插入值的时候,才是'a'
    比如
    insert table TC values('a',10);---state的值为'a'insert table TC values('a',10,'');-----state的值为空
      

  3.   

    不对该字段操作时,该字段才会default为‘a’
      

  4.   

    啊那我还想让没有修改到的是DEFAULT对应的值 怎么整呢
      

  5.   

    关于default,文档是这么说的.
    Integrity constraint checking occurs after the row with a default value is inserted.
    也就是说default只对insert有效.
      

  6.   

    update TC SET(STATE)=(SELECT nvl(B.STATE,'a') FROM QE B WHERE TC.CODE=b.CODE)
    这样可以达到你的目的
      

  7.   

    啊  那我要是想找出TC中所有STATE 为空的列 可以吗
      

  8.   

    default 值也只是争对insert的 你不插入的时候补上默认值update TC SET(STATE)=(SELECT B.STATE FROM QE B WHERE TC.CODE=QE.CODE);
    这个肯定会把不匹配的全部更新为null update TC SET(STATE)=(SELECT B.STATE FROM QE B WHERE TC.CODE=QE.CODE);
    当TC.CODE=QE.CODE不匹配的时候 更新就成了这样update TC SET(STATE)=null所以的加个where
    update TC SET(STATE)=(SELECT B.STATE FROM QE B WHERE TC.CODE=QE.CODE);
    where exists(SELECT 1 FROM QE c WHERE TC.CODE=c.CODE)
      

  9.   

    update TC SET(STATE)=nvl((SELECT B.STATE FROM QE B WHERE TC.CODE=b.CODE),'a')