を決定するために、クエリをEXISTS:SQL Serverは、私は以下の表を持っている関係
フー
FooId INT PRIMARY KEY
FooRelationship
FooRelationshipId INT PRIMARY KEY IDENTITY
FooParentId INT FK
FooChildId INT FK
どのように私はすべて戻ってくるクエリを記述しますFooのIDとステータス(レコードが親、子、どちらでもない)
ルール:
- fooが、親や子供やでもないだろう。
- fooは、複数の異なるfoosの親になることができます。
- fooは複数のfooの子になることはできません。
私はもともとこのクエリを書いた:
SELECT
FooId,
CASE
WHEN Parent.FooRelationshipId IS NOT NULL THEN 'Parent'
WHEN Child.FooRelationshipId IS NOT NULL THEN 'Child'
ELSE 'Neither'
END
FROM Foo F
LEFT JOIN FooRelationship Parent ON F.FooId = Parent.FooParentId
LEFT JOIN FooRelationship Child ON F.Fooid = Child.FooParentId
これはfooが他の二つのFOOSへの親であるためならば、それはその倍のIDを返します壊れています。
これを再利用して結合を使用したり、EXISTSなどを使用したりすることはできません。
このクエリを書くより良い方法はありますか?このテーブルにはかなりの数の行があり、それは約30〜40列あるので、私はパフォーマンスについて心配していますか? – Dismissile
@Dismissile私はより多くの情報が必要ですが、1つのオプションは、副選択としてあなたのサンプル(狭い)クエリを使用し、その上でJOINすることです。次に、 'FooID、Relationship'情報を残りの行を取得せずに取得し、' JOIN'を実行します。私は例を投稿します。 – JNK
ありがとうございました。 – Dismissile