Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用嵌套子查询更新表_Sql_Oracle_Sqlplus - Fatal编程技术网

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。成功了。祝你今天愉快