【发布时间】:2015-10-11 04:47:50
【问题描述】:
以下查询应该返回“预订了所有船只的水手”
这是 mySQL 代码
SELECT S.sname
FROM Sailors S
WHERE NOT EXISTS
((SELECT B.bid
FROM Boats B)
Except
(SELECT R.bid
FROM Reserves R
WHERE R.sid = S.sid))
我只是……不知道如何阅读它。我知道“NOT EXISTS”后面的子查询应该返回 Boats 表中所有记录的船 ID(出价)。因此,Except 后面的查询应该返回所有已预订船只的船 ID……这意味着如果有人预订了所有船只,则不应返回任何内容,这意味着 NOT EXISTS 将评估为 true 并且它将只给那个水手的名字?我认为这是让我感到困惑的最后一部分......它最终如何返回水手的名字?
【问题讨论】:
-
我不知道 MySQL 支持 EXCEPT 子句
-
@Strawberry 很有趣。我的教授让我们下载 MySQL 服务器来练习执行 SQL 查询,但她给了我们非 MySQL 示例(比如这个)。叹息。
-
@shA.t 这是我的教授给我的查询。我更喜欢..它所做的事情的英文翻译而不是更正它..我相信子查询会返回所有尚未保留的船 ID。所以当我读到“NOT EXISTS”时,NOT EXISTS 应用于什么?什么是不存在的?是说“找到所有未保留的船ID表中不存在的sname吗?”如果该表本身没有 snames(只有船 ids),它如何获得任何返回的名称?
标签: mysql sql nested-queries