SQL:查找至少预订了3次的海员的姓名

SQL:查找至少预订了3次的海员的姓名,sql,Sql,我有一张桌子: Sailors (sid, sname, rating, age) Boats (bid, bname, color) Reserves (sid, bid, date) 我认为可以这样做的问题是: SELECT Sailors.sname FROM Sailors, Reserves WHERE 3 <= COUNT(Reserves.sid = Sailor.sid) 选择sealers.sname 来自水手、预备队 其中3可以执行此操作- SELECT Sail

我有一张桌子:

Sailors (sid, sname, rating, age)
Boats (bid, bname, color)
Reserves (sid, bid, date)
我认为可以这样做的问题是:

SELECT Sailors.sname
FROM Sailors, Reserves
WHERE 3 <= COUNT(Reserves.sid = Sailor.sid)
选择sealers.sname
来自水手、预备队
其中3可以执行此操作-

 SELECT Sailors.sname
 FROM Sailors
 JOIN Reserves
 ON Sailors.sid = Reserves.sid
 GROUP BY Sailors.name
 HAVING count(Reserves.bid) >= 3;

编辑:上述逻辑在水手姓名级别/粒度上聚合(使用GROUPBY子句)因此,可以在聚合级别上统计每个seller的保留数量,然后使用having子句(用于聚合比较)检查seller级别的保留数量的给定标准,您可以使用JOIN Reserves,因为字段具有相同的名称
sid
。使用(sid)加入保留区。你能解释一下这个逻辑吗?同意,但我通常喜欢使用这个语法,因为它更通用。@Marcindelta-在我的回答中添加了对逻辑的解释。