假设我们具有以下关系模型。 每个关系的主键以粗体显示:
水手(身份,姓名,等级,年龄)
船(出价,名称,颜色)
保留(出价,出价,日期)
我想到了以下查询:“找到在最多一次预订船101的水手。”给出的答案如下:
SELECT S.sid
FROM Sailors S
WHERE UNIQUE (SELECT R.sid
FROM Reserves R
WHERE R.bid = '101' AND S.sid = R.sid)
我没有得到的是此查询如何返回尚未预订此船的水手。我得到了嵌套查询,它返回了水手的所有sid,这些水手至少保留了一次出价为101的船。
然后使用“ UNIQUE”子句要求sid必须唯一,因此我们删除重复项,并从保留了bid = 101的船只的水手手中保留sid。
但是,我们会以某种方式使从未保留101号船的水手得到某种帮助吗?如果否,那么我们实际上不会计算最多保留101艘船的水手,而真正计算保留101艘船的水手恰好一次。
我要纠正还是错过什么?
答案 0 :(得分:0)
我对UNIQUE语法不熟悉,但是要获得结果,您可以简单地使用:
SELECT R.sid FROM Reserves R where R.did=101 GROUP BY R.sid HAVING count(*)=1