Sql 使用嵌套子查询更新表
我有两个表,我想使用另一个表中的信息更新其中一个表Sql 使用嵌套子查询更新表,sql,oracle,sqlplus,Sql,Oracle,Sqlplus,我有两个表,我想使用另一个表中的信息更新其中一个表 create table CUSTOMER (CID number(6), First_Name varchar2(12), Last_Name varchar2(12), Category varchar2(7), Balance_Due number(4,2), SponsorID number(6), CONSTRAINT pkCID PRIMARY KEY (CID), CONSTRAINT fkCUSTOMER foreign key
create table CUSTOMER
(CID number(6),
First_Name varchar2(12),
Last_Name varchar2(12),
Category varchar2(7),
Balance_Due number(4,2),
SponsorID number(6),
CONSTRAINT pkCID PRIMARY KEY (CID),
CONSTRAINT fkCUSTOMER foreign key (sponsorID) references customer);
以及我要更新的表:
create table BOOK_COPY
(Copy_Num number(5),
Bookid number(5),
out_to_CID number(6),
Date_Out date,
Date_Due date,
Held_Until date,
held_for_CID number(6),
CONSTRAINT PKCOPY PRIMARY KEY (Copy_Num,Bookid),
CONSTRAINT FKCID FOREIGN KEY (out_to_CID) references CUSTOMER (CID),
CONSTRAINT FKHeld FOREIGN KEY (held_for_CID) references CUSTOMER (CID),
CONSTRAINT FKBookid FOREIGN KEY (Bookid) references BOOK (Bookid));
我想做的是更新图书,所以日期,到期日,到期日+90,其中类别=教员
此外,我想能够更新一个以上的类别使用的情况下,当
如果我的声明中没有“where category='faculty'”子句,我可以进行更新。但是,当我尝试获取customer表时,出现了语法错误。如果您想为不同的类别设置不同的时段,我建议:
update book_copy b
set date_due = (case (select category from customer c where c.cid= b.out_to_cid)
when 'faculty' then date_out + 90
when 'administrator' then date_out + 120
when 'student' then date_out - 10
else date_due
end);
谢谢戈登!当我执行命令时,我没有得到错误,但是到期日期没有更新。你知道为什么吗?@JacobLindbergSørensen。如果
customer
表中没有匹配项,或者匹配的文本与when
子句不同,则会发生这种情况。根据数据库的设置方式,即使大小写也可能有所不同,因此您可以执行select lower(category)代码>在子查询中。再次感谢@Gordon Linhof。成功了。祝你今天愉快