2017-02-21 42 views
2

enter image description here找到位於每個城市SQL

問題所有企業: 假設公司可以位於幾個城市。查找位於「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,因爲它們是同一張表的副本?

我在尋求幫助瞭解解決方案。

任何解釋讚賞!

回答

5

這需要一些解剖,所以讓我們分解個別部分。

爲了方便起見,請將查詢視爲在公司表中的每一行上逐一運行。

1部分:

SELECT s.Company_Name FROM Company s 

這個我們目前公司集。因此,讓我們說公司表中的第一行是Apple,s.Company_Name現在是'Apple'。

第2部分:

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

這讓我們的每城市小的地方銀行公司存在的列表,我們將需要這之後不久。

3部分:

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

記住s.Company_Name是如何 '蘋果'?這將給我們一個列表,每個城市蘋果存在。

4部分:

現在,我們有我們列出了從第2部分和第3部分,我們使用EXCEPT子句中的第三部分從結果中部分「刪除」的所有條目2.

例1 - 在第二部分中,我們得到了「倫敦」和「紐約市」(小銀行公司所在的城市),第三部分我們得到了「倫敦」,「紐約市」和「巴黎」蘋果存在)。在這個例子中,我們的EXCEPT子句的結果是一個空的結果集(一個不返回行的SELECT)。例2 - 然而,如果第二部分給了我們「倫敦」,「紐約市」和「巴黎」,第三部分給了我們「倫敦」和「紐約市」,那麼我們的結果EXCEPT子句將是單行,包含「Paris」。

這給我們帶來...

5部分:

WHERE NOT EXISTS(...) 

這將刪除其中不存在城市,「小銀行股份有限公司」做任何公司。如果它們是示例1(來自第4部分),那麼NOT EXISTS是真實的,但是如果它們是示例2,那麼NOT EXISTS是錯誤的,並且公司不返回。

需要一段時間才能找到你的頭,但我希望這至少有助於。讓我知道是否有任何意義。

相關問題