2017-02-21 6 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

これは少し解剖するので、個々の部分で分解してみましょう。

簡単にするには、クエリをCompanyテーブルのすべての行で1つずつ実行していると考えてください。

パート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' 

これは、我々はすぐにこれを必要とするつもりだ、私たちの小さなバンク株式会社は、存在するすべての都市をのリストを与えます。

パート3:

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

はs.Company_Nameが 'アップル' だったか覚えていますか?これはAppleが存在する都市ごとにのリストを私たちに提供する予定です。

パート4:今、私たちはパート2とパート3からの私達のリストを持っていることを

、我々はパートの結果から第3部内のすべてのエントリを「削除」する句EXCEPT使用2.

例1 - 第2部では、「ロンドン」と「ニューヨーク市」(Small Bank Corporationが存在する都市)を取得し、第3部では「ロンドン」、「ニューヨーク市」、「パリ」アップルが存在する)。この例では、EXCEPT句の結果は空の結果セット(行を返さないSELECT)です。

例2 - 第2部で「ロンドン」、「ニューヨーク市」、「パリ」、第3部で「ロンドン」と「ニューヨーク市」を指定していた場合は、 EXCEPT句は "Paris"を含む単一の行になります。

これは私たちにもたらすために...

パート5:に「中小銀行株式会社は」を実行すべての街を存在しないすべての企業を削除します

WHERE NOT EXISTS(...) 

。例1(パート4)の場合、NOT EXISTSは真ですが、例2の場合、NOT EXISTSはfalseになり、その会社は返されません。

頭がおかしくなるまでには時間がかかりますが、これが少なくとも役立つことを願っています。何かが意味をなさないと私に教えてください。

関連する問題