2015-06-14 2 views
-3

У меня есть эти 3 таблицы:SQL подзапросы Ques:

1) Sailors (sid:INT, sname:VARCHAR(30), rating:INT, age:INT)

2) Boats (bid:INT, bname:VARCHAR(30), color:VARCHAR(10))

3) Reserves (bid:INT, sid:INT, day:DATE)

я не знаю, как построить запрос, который отображает : Имена матросов, зарезервировавших как минимум 2 лодки разных цветов!

+0

Попробуйте. Затем отредактируйте свой вопрос с помощью попытки. –

+0

включают ваши данные образца и ожидаемый результат с попыткой попытки. – HaveNoDisplayName

ответ

0

Вы можете создать группу для каждого матроса, а затем требовать, что есть по крайней мере 2 различных цветов в этой группе:

select s.sid 
,  s.sname 
,  count(distinct b.color) as NumberOfBoatColorsReserved 
from Reserves r 
join Sailors s 
on  s.sid = r.sid 
join Boats b 
on  b.bid = r.bid 
group by 
     s.sid 
,  s.sname 
having count(distinct b.color) >= 2 
0

Существует, вероятно, более эффективный способ сделать это, но вот быстрый и сухой раствор:

SELECT sname FROM Sailors 
JOIN Reserves USING (sid) 
JOIN Boats USING (bid) 
GROUP BY sname, color 
HAVING COUNT(sname) >= 2; 

Добавлено Выбор Уникальный BID:

SELECT bid FROM Sailors 
JOIN Reserves USING (sid) 
JOIN Boats USING (bid) 
HAVING COUNT(bid) >= 3; 

Где 3 представляет собой общее количество матросов, находящихся в базе данных. Это можно запросить отдельно и достаточно просто с помощью COUNT

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