2015-02-24 120 views
0

表1:书虫数据库的模式。主键带下划线。有一些外键引用将表连接在一起;你可以使用这些与自然连接。SQL更新语句数据库修改

Author(aid, alastname, afirstname, acountry, aborn, adied). 
Book(bid, btitle, pid, bdate, bpages, bprice). 
City(cid, cname, cstate, ccountry). 
Publisher(pid, pname). 
Author_Book(aid, bid). 
Publisher_City(pid, cid). 

我需要使用一个更新语句将所有Charles Dickens书籍的价格降低20%。

尝试使用...

update book 
set bprice=bprice * .2 
where alastname = 'Dickens'; 

,但没有运气,我得到的语法:

ERROR: column "alastname" does not exist 
LINE 3: where alastname = 'Dickens'; 

不知道如何使用子查询或“嵌套查询查询”找到的主键我需要更新的元组。

+1

由于DML没有标准化,请确定您的预期RDBMS。也阅读JOINs。 – 2015-02-24 17:59:58

+0

@ PM77-1它只是基本的PostgreSQL – 2015-02-24 18:04:23

回答

0

简单的连接查询会是这样 -

update Book set bprice = bprice * 0.8 where bid IN (select bid from Author_Book ab join Author a on ab.aid = a.aid where a.alastname = 'Dickens'); 

请注意,你必须降低20%,不让它20%。

+0

感谢你的回应,我仍然在学习如何实现连接,并且已经为我阐明了这个话题。再次感谢! – 2015-02-24 18:25:16

0

试试这个:

update book b 
set bprice=bprice * 0.2 
where bid in (
select aid, bid from Author a 
inner join Author_Book ab ON a.aid = ab.aid where alastname = 'Dickens' 
) 
0

它应该像下面的语句。 请查找错误信息。

update book b 
set b.bprice=b.bprice * .2 
where b.id in(select ab.bid from author_book ab join author a on a.aid = ab.aid where alastname = 'Dickens') ;