2010-10-14 4 views
2

Мне нужно выбрать номер (cid) клиента, который арендовал тот же фильм из двух разных ветвей. Мои таблицы следующим образом:выбор нескольких строк соответствующих данных

RENTED 
(cid, copyid) 
12345 99999 
12345 88888 

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

Так один клиент (12345) арендовал то же самое движение (444) из двух различных ветвей (123, 456). Я не уверен, как сравнивать значения, когда в двух разных записях значения mid = mid, но ставка! = Ставка. Я пытался использовать «некоторые» и «все», но это не дает мне ни одной строки (код ниже)

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

Это не соответствует требованию, чтобы ставка была разной для двух строк. –

+1

@Joe Stefanelli: Теперь это –

+0

@Joe Stefanelli: с обновлением @OMG Ponies запрос должен соответствовать вашему требованию :) thx –

0

Используя один проход по каждой таблице:

выбрать отличный (CID) из ( выберите УУР кол (предложение) over (раздел по r.cid, c.mid) dist_branch из арендованного r, копия c где r.copyid = c.copyid) где dist_branch> 1;

Смежные вопросы