使用嵌套子查询更新表

时间:2014-12-02 22:11:36

标签: 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 (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));

我想要做的是更新BOOK_COPY所以date_due = Date_out + 90其中category = faculty

此外,我希望能够使用案例更新多个类别。

如果我的声明中没有“where category ='faculty'”条款,我可以更新。但是当我尝试获取客户表时,我收到语法错误。

1 个答案:

答案 0 :(得分:0)

如果您想为不同类别设置不同的时段,我建议:

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);
相关问题