系统中存在3个表
create table GG_QKITEM
(
  ITEMCODE   VARCHAR2(10) not null,
  ITEMNAME   VARCHAR2(20) not null,
  PARENTCODE VARCHAR2(10) not null,
  CRTDEPT    VARCHAR2(20),
  VIEWDEPT   VARCHAR2(100),
  SORTKIND   NUMBER(6,2) default 9999
)create table BAS_DEPT
(
  DEPT_ID        VARCHAR2(10) not null,
  DEPT_NAME      VARCHAR2(50) not null,
  SHORT_NAME     VARCHAR2(40),
  EN_NAME        VARCHAR2(40),
  MANAGER_ID     VARCHAR2(10),
  MANAGER        VARCHAR2(20),
  DEPT_CODE      VARCHAR2(10),
  SF_KEY         VARCHAR2(10),
  PARENT_DEPT_ID VARCHAR2(10),
  LOGO           BLOB,
  TELEPHONE1     VARCHAR2(20),
  TELEPHONE2     VARCHAR2(20),
  FAX            VARCHAR2(20),
  ROOM_NO        VARCHAR2(5),
  POSTALCODE     VARCHAR2(20),
  ADDRESS        VARCHAR2(200),
  HOMEPAGE       VARCHAR2(40),
  MAIL           VARCHAR2(40),
  MEMO           VARCHAR2(200),
  TREE_ID        VARCHAR2(20)
)
数据
dept_id   dept_name
  22       洪山区委
create table SYS_DEPT
(
  DEPTID      VARCHAR2(32) not null,
  DOMAINID    VARCHAR2(32),
  DEPTNO      VARCHAR2(10) not null,
  DEPTNAME    VARCHAR2(100),
  SHORTNAME   VARCHAR2(50),
  ISJC        CHAR(1) not null,
  MANAGER     VARCHAR2(32),
  DEPTSORT    VARCHAR2(20),
  SFKEY       VARCHAR2(10),
  TXDZ        VARCHAR2(100),
  LXR         VARCHAR2(32),
  LXDH        VARCHAR2(20),
  YZBM        VARCHAR2(6),
  CREATE_DATE DATE,
  VOLUME_ID   VARCHAR2(20),
  VOLUME_NAME VARCHAR2(100)
)
数据
deptno    deptname
 0101    洪山区委 
系统中gg_qkitem表中的crtdept原来的数据是bas_dept表中的dept_id
现在我想把gg_qkitem中的crtdept更新成sys_dept表中的deptno
sql该怎么写

解决方案 »

  1.   

    update gg_qkitem a set crtdept=
    ( select crtdept from SYS_DEPT b where a.crtdept=b.dept_id)
    where exists( select 1 from SYS_DEPT b where a.crtdept=b.dept_id)
    楼主的条件给的还不够全面,比如:SYS_DEPT 表跟gg_qkitem有什么直接或者间接关系
      

  2.   

     GG_QKITEM表中的CRTDEPT字段就是BAS_DEPT 表中的DEPT_ID
     现在我想把crtdept字段改成SYS_DEPT 表中的DEPTNO字段
     而BAS_DEPT 的dept_name 和sys_dept表中的deptname是相同的
      

  3.   

    你更新第一个表的CRTDEPT字段为第三个表DEPTNO字段。
    是根据什么关系来更新你都没说。怎样关联这两个表?
      

  4.   

    是不是第一个表的CRTDEPT字段关联第二个表的DEPT_ID字段,再用第二个表的dept_name字段关联三个表的deptname字段update GG_QKITEM  a
    set CRTDEPT=(select c.DEPTNO from BAS_DEPT b,sys_dept c
    where b.dept_name=c.deptname
    and a.CRTDEPT=b.DEPT_ID);
      

  5.   

    UPDATE GG_QKITEM A
       SET CRTDEPT = (SELECT C.DEPTNO
                        FROM BAS_DEPT B, SYS_DEPT C
                       WHERE B.DEPT_NAME = C.DEPTNAME
                         AND A.CRTDEPT = B.DEPT_ID)
     WHERE EXISTS (SELECT NULL
              FROM BAS_DEPT B, SYS_DEPT C
             WHERE B.DEPT_NAME = C.DEPTNAME
               AND A.CRTDEPT = B.DEPT_ID);