考虑关系 船(BID,BNAME,COLOR), SAILOR(SID,SNAME,AGE,RATING) 储备(出价,SID,DAY) 我想要检索所有船员保留的船只的出价
答案 0 :(得分:1)
正确的关系划分实现在这里。其他人可能会建议进行聚合,但在某些情况下可能会导致误导性信息(误报) - “有什么船没有得到保留?”
SELECT bid FROM Boat WHERE NOT EXISTS (SELECT sid FROM Sailor WHERE SID NOT IN (SELECT Sid from Reserves WHERE Sailor.SID = Reserves.SID))
答案 1 :(得分:0)
如果每艘船都预留了一艘船,那么该船的RESERVES.SID计数(仅计算唯一的SID)将与水手的数量相同:
SELECT bid FROM Reserves
GROUP BY bid
HAVING COUNT(DISTINCT sid) = (SELECT COUNT(sid) FROM Sailor)