理解此SQL代码有困难吗
所以我一直在准备考试,我遇到了一个问题,我需要帮助 代码试图找到所有船只的船员的名字:理解此SQL代码有困难吗,sql,postgresql,Sql,Postgresql,所以我一直在准备考试,我遇到了一个问题,我需要帮助 代码试图找到所有船只的船员的名字: SELECT S.sname FROM Sailors S WHERE NOT EXISTS ((SELECT B.bid FROM Boats B) EXCEPT (SELECT R.bid FROM Reserves R
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))
现在我觉得我得到了大部分,但我唯一的问题是
除了
和不存在
以及它们在进行上述除法时如何协同工作。我想我得到的是不存在的东西,除了单独做,但一起做,这是我的困惑所在。不存在的子查询得到的是所有没有为该海员保留的船只。我称之为“水手的无保留船只”
外部查询然后获取所有没有船只的水手,这些船只是为该水手保留的。换言之,总体查询是获取已预订所有船只的水手
这绝对不是我编写查询的方式。我认为这个版本的意图更加明确:
select sid
from reserves
group by sid
having count(*) = (select count(*) from boats);
注意:如果一名水手可以多次预订同一艘船,这可能需要
计数(不同出价)
。除非他想要S.name
,而不是S.sid
@rospresser。添加一个联接以获取名称非常简单。