2017-07-31 7 views
0

2つのテーブルのデータを結合します。テーブルは次のとおりです:SQLが存在する場合、他のテーブルの値を置き換えます。

Values     Translations  
ID | VALUE    TEXT | LANG | TRANS 
--------------   ----------------------------------- 
20 | 1204    black | EN  | black 
20 | black    black | GER  | schwarz 
20 | length   black | FR  | noir 
20 | dn200    length | EN  | length 
         length | GER  | länge 

VALUEが存在するかどうかを確認し、選択した言語に置き換えます。 VALUEがTranslations表に存在しない場合、VALUEの値はそのままです。

募集出力(選択した言語は、GERのとき)

VALUE 
1204 
schwarz 
länge 
dn200 

募集出力(選択した言語であるFR)私はすべてのVALUE値とTRANS値を取得し、この句を使用して

VALUE 
1204 
noir 
length 
dn200 

select case when isnull(TRANS, '') = '' then VALUE else TRANS end 
from Translations 
right join Values 
on TEXT = VALUE 
where ID = 20 

。私はドイツ語LANG = 'GER'のための言語のための条件を実装する方法を知らない。

ご協力いただきありがとうございます。

私はというより left joinをお勧めします

答えて

0

right join(セマンティクスは従うことが容易です:「最後のテーブルであることを起こるものは何でもですべてを保つ」「最初のテーブルですべてを保つ」のではなくその後

。シンプルcoalesce()で十分:VALUESは、SQLキーワードなので、それはテーブルの悪い名前です

select coalesce(t.trans, v.value) 
from Values v left join 
    Translations t 
    on v.value = t.text and t.lang = 'GER' 
where v.id = 20; 

注意することをあなたはおそらく名前をエスケープする必要があります

関連する問題