选择多行匹配数据

时间:2010-10-14 15:49:58

标签: sql oracle

我需要选择从2个不同分支租用同一部电影的客户的号码(cid)。我的表格如下:

RENTED
(cid, copyid)
12345  99999
12345  88888

COPY
(copyid, mid, bid)
99999    444  123
88888    444  456

因此,一个客户(12345)从两个不同的分支(123,456)租用了相同的移动(444)。我不确定如何比较两个不同记录中的值,值mid = mid但bid!= bid。我尝试使用'some'和'all',但这没有给我任何行(代码如下)

select cid
from rented R join copy CP on R.copyid = CP.copyid
where CP.mid = all (select mid from copy where CP.mid = copy.mid) and CP.bid != some (select bid 
from copy where CP.bid = copy.bid);

我的输出应该是

cid
12345

2 个答案:

答案 0 :(得分:3)

您可以使用HAVING子句。以下查询将列出曾多次租借同一部电影的所有客户:

SELECT r.cid
  FROM rented r
  JOIN copy p ON r.copyid = p.copyid
 GROUP BY r.cid, p.mid
 HAVING COUNT(DISTINCT c.bid) > 1

答案 1 :(得分:0)

在每张桌子上使用一次传递:

从中选择distinct(cid)   选择cid,count(bid)over(分区由r.cid,c.mid)dist_branch   从租来的r,复制c   其中r.copyid = c.copyid) dist_branch> 1;