我有这3张桌子:
1)/authors/s-kyle-newman
2)Sailors (sid:INT, sname:VARCHAR(30), rating:INT, age:INT)
3)Boats (bid:INT, bname:VARCHAR(30), color:VARCHAR(10))
我不知道如何构建显示以下内容的查询: 保留至少2艘不同颜色船只的水手的名字!
答案 0 :(得分:0)
您可以为每个水手创建一个组,然后要求该组中至少有两种不同的颜色:
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
答案 1 :(得分: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
进行简单查询