2009-05-18 8 views
3

私は2つのテーブルから一緒にいくつかのデータを結合しようとしているが、いくつかの列にしています。ここでの例です:SQLクエリいくつかの列に参加する

ソーステーブル

ID | Desc | AAAA | BBBB |

表2テーブル

ID |テキスト| ID1 | ID2 | ID3 | ソーステーブルから表2でID1、ID2およびID3がIDのある

私は結果をもたらすクエリを実行したいと思います:

Table2.Text, 
Source.Desc(ID1), 
Source.AAAA(ID1), 
Source.Desc(ID2), 
Source.AAAA(ID2), 
Source.Desc(ID3), 
Source.AAAA(ID3) 

私は」これは参加するだろうが、私は右の構文を得ることができない...または私は組合とオフの方が良いだろうと思いますdは?

答えて

1

ないすべてのソース表を表2に移入されている場合、これはまだあなたの部分的な結果が得られます:私は必要な正確な結果を得るために、私が使用:

SELECT 
    t.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA 
    FROM Table2    t 
     LEFT OUTER JOIN Source s1 ON t.ID1 = s1.ID 
     LEFT OUTER JOIN Source s2 ON t.ID2 = s2.ID 
     LEFT OUTER JOIN Source s3 ON t.ID3 = s2.ID 
    WHERE [email protected] 
+0

これは私が今の答えのジレンマを持っている私のシナリオ – geocoin

+0

の実際のケースで検討していきます:) – geocoin

1

スリーはトリックを行う必要が結合します、あなただけの複数の結合を使用でき

select A.*, coalesce(B1.Text,B2.Text,B3.Text,'') as Text 
from Source A 
inner join Table2 B1 on B1.ID1=A.ID 
inner join Table2 B2 on B2.ID2=A.ID 
inner join Table2 B3 on B3.ID3=A.ID 
6

あなたではないだろうか?例:

SELECT tb.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA 
FROM Table2 tb 
    INNER JOIN Source s1 ON tb.ID1 = s1.ID 
    INNER JOIN Source s2 ON tb.ID2 = s2.ID 
    INNER JOIN Source s3 ON tb.ID3 = s2.ID 
+0

は、これはまさにトリック:) – geocoin

+0

追加しました外側の結合を残しましたが、それは私の特定の状況です。 – geocoin

+0

選択した答えを奪うために申し訳ありませんが、KMさんは、私の状況のた​​めに、より正確だった... – geocoin

4

IDごとに1つずつ、ソーステーブルに3回参加する必要があります。あなたはまた、より良い演奏を見てunuionを試すことができます。

これは悪いテーブルデザインがある(それは正規化する必要があります)、私はあなたが今では、すべての可能な場合はそれを変更することをお勧め。別のレコードの各idでありshoudl BEA関連テーブルは、その後、あなたは一度参加可能性があり、それがはるかに効率的かつに対してコードを書くことがはるかに容易になるだろうと、あなたはテーブル構造を変更する必要はないだろうとalltheはあなたが必要とする日を問い合わせますID4。

+0

私は今、この*オプションではないものの* – geocoin