2010-10-14 73 views
2

我需要选择已租借来自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!= bid。我试图用“一些”和“全部”,但这没有给我行(下面的代码)

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 

回答

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 
+0

这不符合两行竞价必须不同的要求。 – 2010-10-14 15:58:25

+1

@Joe Stefanelli:现在它 – 2010-10-14 15:59:41

+0

@Joe Stefanelli:用@OMG Ponies'更新查询应该符合您的要求:) thx – 2010-10-14 16:03:57

0

在每张桌子上使用单程:

选择不同(CID)从( 选择CID,计数(报价)(由r.cid,c.mid划分)dist_branch from rented r,copy c 其中r.copyid = c.copyid) 其中dist_branch> 1;