2011-03-17 154 views
-1

我创建了下列表格并插入了几个值。创建关系

create table books 
(
bookid integer primary key, 
booktitle varchar(20), 
year integer, 
publisherid integer foreign key references publisher(publisherid), 
price integer, 
number integer 
) 

create table publisher 
(
publisherid integer primary key, 
publishername varchar(20) 
) 

create table author 
(
authorid integer primary key, 
authorname varchar(20) 
) 

create table bookauthor 
(
bookid integer foreign key references books(bookid), 
authorid integer references author(authorid), 
earnings integer 
) 

create table bookreference 
(
bookid integer foreign key references books(bookid), 
referencebook varchar(20), 
times integer 
) 

create table reviewer 
(
reviewerid integer primary key, 
reviewername varchar(20) 
) 

create table bookreview 
(
bookid integer foreign key references books(bookid), 
reviewerid integer foreign key references reviewer(reviewerid), 
score integer 
) 

现在,我要解决在SQL Server 2000中以下查询查找出版于2003年,由两个“萨默尔Tulpule”和“与Hemant Mahta”审查的所有书籍。我没有得到任何关于查询的想法。我怎么写它?

感谢, 普加

+0

“萨默尔Tulpule”和“与Hemant Mahta”是哪一列和表的值 - 更具体的 – NT88 2011-03-17 05:19:19

+0

如果你想添加额外的信息到你的问题,请编辑你的问题。请不要发表澄清作为答案,答案保留为您的问题的答案。 – 2011-03-18 12:33:11

回答

1
SELECT b.bookid as bookid 
FROM (books b INNER JOIN bookreview br ON (br.bookid=b.bookid)) 
     INNER JOIN reviewer r ON (br.reviewerid = r.reviewerid) 
WHERE year=2003 AND r.reviewername IN ('Sammer Tulpule', 'Hemant Mahta') 
GROUP BY b.bookid 
HAVING COUNT(r.reviewerid) >= 2 

显然,这是假设你没有在书评表中重复的条目。

+0

她想要的是一本书已经被两个人审查过的情况,而不是两者之一。所以r.reviewername IN('Sammer Tulpule','Hemant Mahta')不会工作 – 2011-03-17 05:24:49

+0

对不起。我误解了这个问题。编辑。 – 2011-03-17 05:25:53

+0

@Varun,我是对的。我知道我问的是整个查询,我相信我对sql server非常新,而且真的不知道如何编写这些查询。我运行了Stephen Chung提出的查询,但它没有显示任何输出,只显示了列名,即'bookid'。 – Pooja 2011-03-17 12:34:38

0
(SELECT b.* FROM books b, bookreview br, reviewer rv WHERE b.year = 2003 AND br.bookid = b.bookid and br.reviewerid = rv.reviewerid and rv.reviewername = 'Sammer Tulpule') 
INTERSECT 
(SELECT b.* FROM books b, bookreview br, reviewer rv WHERE b.year = 2003 AND br.bookid = b.bookid and br.reviewerid = rv.reviewerid and rv.reviewername = 'Hemant Mahta') 

我对飞打字所以有可能是小错误,但你得到的总体思路...

+0

INTERSECT只能从Sql Server 2005+ http://msdn.microsoft.com/en-us/library/ms188055(v=SQL.90).aspx – 2011-03-17 05:22:33

+0

同意,这很容易理解,尽管...所以离开它在这里....我不知道人们还在使用SQL Server 2000! – 2011-03-17 05:34:32

+0

你可以把它留在这里,但它对OP没有帮助。所以当你得到一些降价时,不要惊慌。 – 2011-03-17 05:42:22