我有这3个表:SQL子查询疑问句:
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艘不同颜色船只的船员的姓名!
我有这3个表:SQL子查询疑问句:
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艘不同颜色船只的船员的姓名!
您可以创建一个组,每个水手,然后要求至少有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
有可能是一个更有效的方式来做到这一点,但这里是一个快速干燥的解决方案:
SELECT sname FROM Sailors
JOIN Reserves USING (sid)
JOIN Boats USING (bid)
GROUP BY sname, color
HAVING COUNT(sname) >= 2;
加选择不同的出价:
SELECT bid FROM Sailors
JOIN Reserves USING (sid)
JOIN Boats USING (bid)
HAVING COUNT(bid) >= 3;
其中3代表数据库中的水手总数。这可以单独查询,很简单地使用COUNT
尝试。然后尝试编辑你的问题。 –
包括您的示例数据和预期输出,并尝试尝试。 – HaveNoDisplayName