主な質問は、関連する外部キーの依存関係
私はどんなUnion
ステートメントを使用していない、この全体の質問に答えるためにSQL文を必要と合流複数を含む複雑なクエリを記述する必要があります。 AdventureWorks2014
データベースでは、どのストアがDavid Campbell
と関連付けられているかを調べる必要がありますか?ストア名でソートします。
このクエリでは、店舗名と最初/最後を選択項目の最初の項目として表示する必要があります。この問合せは、さまざまな表とそのfk依存関係間の結合を使用して実行する必要があります。
外部キー関係のない結合テーブルは含めないでください。
Select object_name(t.object_id), Schema_name(t.schema_id), t.name, c.name From sys.tables t Join sys.columns c on t.object_id = c.object_id Where t.name like '%Store%' or c.name like'%Store%'
これは私が興味のある特定のテーブルを識別してみましょう:
物事は私がスキーマIDを取得し、ストアに関連しているのidのオブジェクトに、このクエリを実行した
を試してみました私が参加することができます。表Sales.Customer
はFK名StoreID
& PersonID
と同様に表Sales.Store
とStoreName
です。
そこからfkの依存関係を見て、テーブルPerson.Person
の最初と最後の名前が見つかりました。
は、残念ながら、私は店がDavid Campbell
に関連付けられている隔離することができないよう
Select
s.name StoreName, p.FirstName, p.LastName
From
sales.customer c
Join
person.person p On c.personID = p.businessentityID
Join
sales.store s on s.businessentityID = p.businessEntityID
Where
p.FirstName Like ‘%David%’
and p.LastName Like ‘%Campbell%’
Order by
s.Name
問題:私は運でこのクエリを試してみました。私は結合が正しくないことを知っていますが、 "On"節と表を正しくリンクしてfkの依存関係に基づいて適切な結果を生成する方法がわかりません。
私はperson.personから2つのレコードがこれを実行することによって関連していることを知っている:
Select *
From Person.Person
Where p.FirstName Like '%David%'
and p.LastName Like '%Campbell%'
これは全く分からないが、表Person.Person
に 『デヴィッド・キャンベル』に関連付けられているBusinessentityID
の283と609を返します。それらのIDをdavidに関連付けられたストア名にリンクする方法。
基本的に、私のクエリが結果を戻さないようにする結合が具体的にわかりません。必要に応じて試したことについて、より多くの情報を含めることができます。
ヒントとフィードバックをお探しですか?
ありがとうございます!
EDIT:
私の独創的なアプローチがオフになって表示されます。私はSales.Storeの外来キーから始まってそこから行く別のルートに行きました。また、 "David Campbell"に関連付けられたストアをカウントするウィンドウ関数を追加し、ヌルパラメータをwhere句に追加して、名前のないストアを説明しました。ここで
私の最終的な結果である:
select
s.Name StoreName, p.FirstName, p.LastName,
count(s.BusinessEntityID) Over(Partition by s.salespersonId) as TotalStoresAssociatedWithDavidCampbell --<38 records show a "David Campbell"
from
Sales.Store s
join
Sales.SalesPerson sp on s.SalesPersonID = sp.BusinessEntityID
Join
Person.BusinessEntity be on sp.BusinessEntityID = be.BusinessEntityID
Join
Person.Person p on p.BusinessEntityID = be.BusinessEntityID
where
p.FirstName like '%David%'
and p.LastName Like '%Campbell%'
or s.Name is null
order by s.Name
けれども、これは元の質問に対する正しい答えであれば、私は知りません。私はそうだと思いますが、私が確信していれば、それについては気分が良くなります。
dav adiありがとうございました。私はクエリを試みたが運がない。私は別のルートを行ったが、私は答えを明らかにしたかもしれないと思う。私の結果が正確かどうかはわかりませんが。 – TheCyberTechnician