SQL子查询问题:

时间:2015-06-14 17:29:28

标签: mysql sql subquery

我有这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艘不同颜色船只的水手的名字!

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

进行简单查询