2011-06-30 25 views
0

テーブルが3つありますが、ここではテーブルA、B、Cと呼んでいます。テーブルAはBと1対多の関係を持ち、BはCと1対多数の関係を持っています。このクエリでは、Cからの不本意な値だけが必要ですが、以下のクエリはBに一致するマルチファイルのCレコードを返します。3つのテーブルから1つのテーブルを選択する

現在、私のクエリはそのようなものです:

Select * from A Left Outer Join B on A.key = B.key Left Outer Join C on B.AltKey = C.AltKey 

アイデアはありますか? 事前に感謝します。

+1

A、B、Cのサンプルデータを提供して、実際にどの行を特定できますか?また、使用しているSQL Serverのバージョンを指定してください。このソリューションは、SQL Server 2000とSQL Server 2008とではかなり異なる場合があります。 –

+0

こんにちはアーロン、私はMSSQL 2008を使用しています。私はAJに対する私のコメントで私が見たいと思っているものの詳細な説明を提供しました。テーブルAをプロジェクト、Bを監査、Cを調査結果と考えてください。したがって、Project0 null null、Project1 Audit1 Finding1、Project2 Audit2 null、Project2 Audit3 Finding3、Project 2 Audit 4 nullなど。そうですね、Project2 Audit3 Finding4がレコードとして表示されないようにします。 。 – Sean

+0

まだ見ておくと便利だと思います。 「1つの一致につき1つだけ、したがって別個の欲求」と「1つだけのレコードを表示する」のようなステートメントの真の関係性の側面を決定するのは難しい.Cの行が5つある場合は、あなたは欲しい。 C内に少なくとも1つの行があることだけを知りたい場合は、別の方法(たとえば、結合の代わりにEXISTSサブクエリ)を解決することができます。だから、サンプルデータと望ましい結果をください。 –

答えて

1

なぜLEFT OUTER JOINを使用していますか?普通の古いJOINで切り替えて、探しているものが得られたかどうか確認してください。

+0

私はCで一致するかどうかにかかわらず、Bで一致するかどうかにかかわらず、B内のすべてのレコードとB内のすべてのレコードに関係なく、A内のすべてのレコードを表示するために左外部結合を使用します。 Bには、試合ごとに1つのみ、したがって別個の欲求があります。 I. Bのレコードのキーと一致するキー値を持つCの行が5行ありますが、5つではなく1つのレコードだけを表示したいだけです。それは理にかなっていますか? – Sean

0
Select distinct C.* from C 
Left Outer Join B on C.a = B.a 
Left Outer Join A on B.a = A.a 
+0

彼はBが存在するかどうかにかかわらず、Aのすべてのレコードを望んでいます。そして、Bがそれにリンクされるためには、Bが存在しなければならない。だから、彼はこの質問ですべてのAを取得しませんでした。 – FlyingStreudel

+0

しかし、私はBとAにある列を見たいと思っています。これは、テーブルCの列だけを表示します。 – Sean

+0

厳密にStruedel; ) – Sean

関連する問題