2014-12-02 126 views
-1

我有兩張表,我想用另一張表中的信息更新其中一張表。使用嵌套子查詢更新表

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類別爲教師

此外,我想是能夠使用大小寫時更新多個類別。

我可以更新如果我沒有在我的聲明中的「where category ='faculty'」條款。但是當我嘗試獲取客戶表時遇到語法錯誤。

回答

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); 
+0

感謝戈登! 當我執行命令時,我沒有得到任何錯誤,但日期到期沒有更新。你知道爲什麼嗎? – 2014-12-09 23:10:49

+0

@JacobLindbergSørensen。 。 。如果'客戶'表中沒有匹配,或者匹配的文本與'when'子句不同,就會發生這種情況。根據數據庫的設置方式,甚至可能會有所不同,所以你可以選擇較低的(類別)。 。 。 '在子查詢中。 – 2014-12-09 23:12:41

+0

再次感謝@Gordon Linhof。有效。祝你今天愉快 – 2014-12-09 23:19:27