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;