3つのテーブルのデータを結合しようとしていますが、マイナーな問題があります。3つのSELECTステートメントを含むSQLステートメント
私はテーブルAからのすべてのレコードを取得したいのは、我々は3つのテーブル
表A
ID | ID2 | ID3 | Name | Age
1 2x 4y John 23
2 7j Mike 27
3 1S1 6HH Steve 67
4 45 O8 Carol 56
表B
| ID2 | ID3 | Price
2x 4y 23
7j 8uj 27
x4 Q6 56
表C
|ID | Weight|
1 145
1 210
1 240
2 234
2 110
3 260
3 210
4 82
を持っているとしましょうすべての人のwei ghs 200以上であるが、表Bに入れることはできません。表Aと表CはIDで結合されています。表AとBは、ID2またはID3のいずれかで結合されています。 ID2とID3の両方が必ずしも入力される必要はありませんが、少なくとも1つは入力されます。いずれかが存在しても、両方とも存在していても、どちらも一意になります。したがって、期待される結果は
3 | 1S1 | 6HH | Steve| 67
です。人は複数の重みを持つことができますが、少なくとも1つのレコードが200以上であれば、それらは引っ張られます。私はこれを行うと、私が持っているもの
は、これまで
Select *
From tableA x
Where
x.id in (Select distinct y.id
From tableA y, tableC z
Where y.id = z.id
And z.weight >= '200'
And y.id not in (Select distinct h.id
From tableA h, tableB k
Where (h.id2 = k.id2 or h.id3 = k.id3)))
TABLEBのチェックを無視するようだと私はジョン、マイクとスティーブを取得します。何か案は?申し訳ありませんが巻き込まれて、これは私が動作する必要があります。私は途中でこれをオラクルでやっています。
[キックする悪い習慣:古いスタイルを使用してJOINを]テストデータである(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/古いスタイルのジョイン.aspx) - 古いスタイルのカンマで区切られたテーブル*スタイルのリストが、ANSIの*適切な* ANSI 'JOIN'構文に置き換えられました - ** 92 ** SQL標準(** 25 years ** ago)とその使用は避けてください –