【发布时间】:2019-11-14 00:15:55
【问题描述】:
假设我们有以下关系模型。 每个关系的主键以粗体显示:
水手(sid、姓名、等级、年龄)
船(出价、名称、颜色)
预留(sid、bid、day)
我想出了以下查询:“找到最多一次预订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 预订船只的 Sailors 的 sid。
但是,我们能以某种方式找到从未预订过 101 号船的水手吗?如果不是,那么我们实际上并不会计算最多预订一次 101 号船的水手,而是只计算一次只预订一次 101 号船的水手。
我是对的还是我遗漏了什么?
【问题讨论】:
-
据我所知,唯一的不是有效的 mysql 是从哪里得到的?
-
@P.Salmon 这对 postgresql 有效,以便我更新标签吗?这更像是一个关于 sql 的理论问题。没有尝试运行它。
-
我不知道,但我从来没有遇到过 unique 在我所知道的任何 sql 的任何上下文中使用,除了用于限定索引。
-
我不同意你的想法。子查询将返回曾租用过一次或多次船只的水手。即使您删除了重复数据,这仍然是正确的。