2014-11-21 48 views
0

我有一个带有人员ID和其他列的Oracle表。这个Person ID可以有一行或多行。查询/过程只为具有多行的Ids获取行

示例表名:库存

personID personName type  bookname  itemnumber 

101   aaa  Book  book1   2001 
101   aaa  Book  book2   2002 
105   mmm  Book  book3   2003 
107   bbb  Book  book4   2006 
107   bbb  Book  book5   2007 
107   bbb   DVD  DVD1   7001 

等等....

Select * from inventory where type='Book'; 

将返回5行的IDS 101,105和107

但我想忽略ID所只有一行(在上面的例子中是105),并且我希望sql查询返回只有具有多行的ID的行(在本例中为101和107)以及这些ID的相应值。 所以结果应该只有四行而不是五行。如何做呢?

我是否需要为此编写一个光标,或者任何人都可以为此提供示例脚本?

回答

1
SELECT * FROM inventory 
WHERE inventory.personID IN 
(SELECT i.personID FROM inventory i 
WHERE i.type='Book' 
GROUP BY i.personID 
HAVING COUNT(*)>1)x 
AND inventory.type='Book' 
+0

此查询是否适用于Oracle PL/SQL或SQL Server?我会在星期一尝试:-) – Learner 2014-11-21 20:57:46

+0

@Learner它会在两个方面工作。 – Mihai 2014-11-21 21:02:40

+1

谢谢@Mihai。有用。 – Learner 2014-11-24 18:48:52

相关问题