【问题标题】:Confused with an SQL Query using UNIQUE对使用 UNIQUE 的 SQL 查询感到困惑
【发布时间】: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 的任何上下文中使用,除了用于限定索引。
  • 我不同意你的想法。子查询将返回曾租用过一次或多次船只的水手。即使您删除了重复数据,这仍然是正确的。

标签: mysql sql unique


【解决方案1】:

我不熟悉 UNIQUE 语法,但要获得结果,您可以简单地使用:

SELECT R.sid FROM Reserves R where R.did=101 GROUP BY R.sid HAVING count(*)=1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多