gpt4 book ai didi

sql - 帮助我理解嵌套 SELECT 语句的这种特殊用法

转载 作者:行者123 更新时间:2023-12-04 21:24:21 27 4
gpt4 key购买 nike

来自 this地点:

表格:

CREATE TABLE PilotSkills
(pilot_name CHAR(15) NOT NULL,
plane_name CHAR(15) NOT NULL,
PRIMARY KEY (pilot_name, plane_name));

CREATE TABLE Hangar
(plane_name CHAR(15) NOT NULL PRIMARY KEY);

询问:
SELECT DISTINCT pilot_name
FROM PilotSkills AS PS1
WHERE NOT EXISTS
(SELECT *
FROM Hangar
WHERE NOT EXISTS
(SELECT *
FROM PilotSkills AS PS2
WHERE (PS1.pilot_name = PS2.pilot_name)
AND (PS2.plane_name = Hangar.plane_name)));

我理解它用于(集合划分)的问题,包括将其描述为“这个机库中没有我不会飞的飞机!”的类比。我不明白的是这里到底是什么在起作用,以及它是如何结合起来做它所说的。

无法详细说明我目前的困难......

编辑:让我先问一下这样的事情是做什么的,确切地说:
SELECT DISTINCT pilot_name
FROM PilotSkills
WHERE NOT EXISTS
(SELECT *
FROM Hangar)

我想我在这里缺少一些基本的理解......

编辑:不相关,如果没有第三个嵌套的 SELECT 就没有意义,对吗?

最佳答案

作为最初的小评论, Select * 在这种情况下是过度的。您应该选择一列或几列,但应避免拉取所有列,尤其是在子查询中,它们仅在查询期间使用,而不在最终结果集中返回。也就是说,要尝试分解工作流程:

  • 从 PilotSkills 中选择 Pilot_Name - 我们最终对飞行员姓名感兴趣。
  • 不存在的地方(从机库中选择 *)- 如果机库表中没有与飞行员相关的条目,我们只会检索飞行员。
  • 不存在的地方(从 PilotSkills 中选择 *)- 我们只会从外部查询中检索没有飞行员的机库。

  • 将其描述为双重否定(来自另一个答案)是理解它的好方法。它可能可以更直接地实现。

    关于sql - 帮助我理解嵌套 SELECT 语句的这种特殊用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6117509/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com