2014-09-23 77 views
1

我需要一个非常专业的帮助,我似乎无法找到答案,问题是,找到与至少2本其他书籍相同书名和出版商的书籍的书名和ISBN。我们如何在一张表中检索相同的数据?

按标题排序。

所以基本上,一切都来自书桌。

CREATE TABLE BOOK 
(
    ISBN VARCHAR2(20), 
    Title VARCHAR2(250) NOT NULL, 
    YearPublished NUMBER(4) NOT NULL, 
    PublisherName VARCHAR2(40) NOT NULL, 

    CONSTRAINT pk_isbnP PRIMARY KEY(ISBN) 
); 

这里是我的草稿:

select _____ 
from book b2 
where ______ (select____ from book b2 
      where _____ = ______ and ______ =______) 
+3

它w如果你能提供你的餐桌结构,会有帮助吗? – Arion 2014-09-23 13:34:25

回答

0

这应该这样做:

select isbn, title 
from books 
where (title,publishername) in(select title,publishername 
           from books 
           group by title,publishername 
           having count(*) >=3) 
order by title; 
+1

谢谢!这解决了我的问题! – 2014-09-23 19:04:41

0
select b1.title, b1.isbn 
from book b1 
inner join 
    (select title, publishername 
    from book 
    group by title, publishername having count(*) > 2) b2 
on b1.title = b2.title and b1.publishername = b2.publishername 
order by b1.title 

内部查询获取的书籍,其中有三个或更多的副本标题/出版商。外部查询使用这些结果来获取关联的ISBN。

0

您可以在此处使用group by语句。

SELECT title 
     ,isbn 
    FROM BOOKS 
    group by title, isbn 
    having COUNT(1) >= 2 order by title; 
+0

'[title]'是(标准)SQL中的无效标识符。 – 2014-09-23 13:54:28

+0

谢谢。我已经使用示例数据在sql server management studio中检查了查询。有问题使用的数据库没有提到。 根据Transact-SQL标题中的msdn不是关键字。 http://msdn.microsoft.com/en-IN/library/ms189822.aspx – Satyajit 2014-09-23 14:02:06

+0

'title'是一个有效的标识符。 '[title]'不是 – 2014-09-23 14:06:08

1

第1步:查找至少有2本书书名和出版商的组合:

SELECT title, PublisherName 
FROM BOOK 
GROUP BY title, PublisherName 
HAVING COUNT(*) > 1 

第2步:发现有这样的标题和发布者的所有其它书籍:

SELECT * 
FROM Books b1 
WHERE EXISTS(
    SELECT title, PublisherName 
    FROM BOOK b2 
    WHERE b1.title = b2.title AND b1.PublisherName = b2.PublisherName 
    GROUP BY title, PublisherName 
    HAVING COUNT(*) > 1 
) 
+0

我看到逻辑,但所需的输出仍然没有出现。 :( – 2014-09-23 13:55:33

相关问题