oracle的数据更新问题

longtramp 2008-07-21 06:28:06
系统中存在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该怎么写

...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oracledbalgtu 2008-07-21
  • 打赏
  • 举报
回复
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);
vc555 2008-07-21
  • 打赏
  • 举报
回复
是不是第一个表的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);
vc555 2008-07-21
  • 打赏
  • 举报
回复
你更新第一个表的CRTDEPT字段为第三个表DEPTNO字段。
是根据什么关系来更新你都没说。怎样关联这两个表?
longtramp 2008-07-21
  • 打赏
  • 举报
回复
是不是分少了?
没人来
longtramp 2008-07-21
  • 打赏
  • 举报
回复
GG_QKITEM表中的CRTDEPT字段就是BAS_DEPT 表中的DEPT_ID
现在我想把crtdept字段改成SYS_DEPT 表中的DEPTNO字段
而BAS_DEPT 的dept_name 和sys_dept表中的deptname是相同的
tcl19841002 2008-07-21
  • 打赏
  • 举报
回复
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有什么直接或者间接关系

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧