Mysql SQL子查询:

Mysql SQL子查询:,mysql,sql,subquery,Mysql,Sql,Subquery,我有三张桌子: 1序列号sid:INT,sname:VARCHAR30,等级:INT,年龄:INT 2船标:INT,b名称:VARCHAR30,颜色:VARCHAR10 3保留出价:整数,sid:整数,日期:日期 我不知道如何构建显示以下内容的查询: 至少预订了两艘不同颜色船只的船员姓名 您可以为每个水手创建一个组,然后要求该组中至少有两种不同的颜色: select s.sid , s.sname , count(distinct b.color) as NumberO

我有三张桌子:

1序列号sid:INT,sname:VARCHAR30,等级:INT,年龄:INT

2船标:INT,b名称:VARCHAR30,颜色:VARCHAR10

3保留出价:整数,sid:整数,日期:日期

我不知道如何构建显示以下内容的查询:
至少预订了两艘不同颜色船只的船员姓名

您可以为每个水手创建一个组,然后要求该组中至少有两种不同的颜色:

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

Try即可。然后尝试编辑您的问题。包括您的示例数据和预期输出,尝试。