Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/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 - Fatal编程技术网

Sql 查找位于每个城市的所有公司

Sql 查找位于每个城市的所有公司,sql,Sql,问题: 假设这些公司可能位于多个城市。查找“小型银行公司”所在城市的所有公司 回答: 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.

问题: 假设这些公司可能位于多个城市。查找“小型银行公司”所在城市的所有公司

回答

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\u name
将始终=
T.company\u name
,因为它们是同一个表的重复项

我请求帮助理解解决方案


感谢您的解释

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

为了使查询更简单,可以将查询视为逐个遍历Company表中的每一行

第1部分:

SELECT s.Company_Name FROM Company s
这就决定了我们现在的公司。假设公司表的第一行是苹果公司,美国公司的名称现在是“苹果”

第2部分:

SELECT City FROM Company WHERE Company_Name = 'Small Bank Corporation'
这给了我们一份小银行公司所在的每个城市的名单,我们很快就会需要这个

第3部分:

SELECT City FROM Company t WHERE s.Company_Name = t.Company_Name
还记得美国公司的名字是“苹果”吗?这将给我们一份苹果所在的每个城市的列表

第4部分:

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

例1——假设在第2部分中我们得到了“伦敦”和“纽约市”(小银行公司所在的城市),在第3部分中我们得到了“伦敦”、“纽约市”和“巴黎”(苹果所在的城市)。在本例中,我们的EXCEPT子句的结果是一个空结果集(一个不返回任何行的SELECT)

例2——然而,如果第2部分给了我们“伦敦”、“纽约市”和“巴黎”,第3部分给了我们“伦敦”和“纽约市”,那么我们的EXCEPT子句的结果将是一行,其中包含“巴黎”

这让我们想到

第5部分:

WHERE NOT EXISTS(...)
这将删除所有在“小型银行公司”所在的每个城市都不存在的公司。如果它们是示例1(来自第4部分),则NOT EXISTS为true,但如果它们是示例2,则NOT EXISTS为false,因此不会返回company


你的头脑需要一段时间才能清醒过来,但我希望这至少对你有所帮助。如果有任何不合理的地方,请告诉我。

您可能认为有一个循环在外循环中运行。子查询
从公司T中选择城市,其中S.company\u name=T.company\u name
将反复运行,有一个“常量”元素:S.company\u name