gpt4 book ai didi

sql - 查找位于每个城市的所有公司 SQL

转载 作者:行者123 更新时间:2023-12-04 19:04:38 26 4
gpt4 key购买 nike

enter image description here

问题:假设这些公司可能位于几个城市。查找位于“Small Bank Corporation”所在的每个城市的所有公司。

回答:

Select S.company_name
from company S
where not exists
(select city
from company
where company_name = 'Small Bank Corporation'
except
(select city
from company T
where S.company_name = T.company_name
)
)

我是如何阅读这篇文章的:选择所有公司哪里不存在不在表 S 和 T 中的“小型银行公司”的城市)。

但是,S.company_name 将始终 = T.company_name,因为它们是同一个表的副本?

我正在寻求帮助以了解解决方案。

感谢任何解释!

最佳答案

这需要一些剖析,所以让我们将其分解为各个部分。

为方便起见,可以将查询想象为逐行遍历 Company 表中的每一行。

第 1 部分:

SELECT s.Company_Name FROM Company s

这设置了我们当前的公司。因此,假设 Company 表中的第一行是 Apple,s.Company_Name 现在是“Apple”。

第 2 部分:

SELECT City FROM Company WHERE Company_Name = 'Small Bank Corporation'

这为我们提供了 Small Bank Corporation 所在的每个城市的列表,我们很快就会需要它。

第 3 部分:

SELECT City FROM Company t WHERE s.Company_Name = t.Company_Name

还记得 s.Company_Name 是“Apple”吗?这将为我们提供 Apple 所在的每个城市的列表。

第 4 部分:

现在我们有了第 2 部分和第 3 部分的列表,我们使用 EXCEPT 子句从第 2 部分的结果中“删除”第 3 部分中的所有条目。

示例 1 - 假设在第 2 部分中我们得到了“伦敦”和“纽约市”(Small Bank Corporation 所在的城市),在第 3 部分中我们得到了“伦敦”、“纽约市”和“巴黎”( Apple 所在的城市)。在此示例中,我们的 EXCEPT 子句的结果是一个空结果集(不返回任何行的 SELECT)。

示例 2 - 但是,如果第 2 部分给了我们“伦敦”、“纽约市”和“巴黎”,而第 3 部分给了我们“伦敦”和“纽约市”,那么我们的 EXCEPT 的结果子句将是单行,包含“Paris”。

这把我们带到...

第 5 部分:

WHERE NOT EXISTS(...)

这将删除“Small Bank Corporation”存在的每个城市中不存在的任何公司。如果它们是示例 1(来自第 4 部分),则 NOT EXISTS 为真,但如果它们是示例 2,则 NOT EXISTS 为假,因此不会返回该公司。

您需要一段时间才能理解,但我希望这至少对您有所帮助。如果有任何不合理的地方,请告诉我。

关于sql - 查找位于每个城市的所有公司 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42356832/

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