Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解此SQL代码有困难吗_Sql_Postgresql - Fatal编程技术网

理解此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。添加一个联接以获取名称非常简单。