2017-07-31 48 views
0

我想合并来自两个表的数据。表是: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的翻译表格离开值中。

通缉输出(当所选语言是GER)

VALUE 
1204 
schwarz 
länge 
dn200 

通缉输出(当所选语言为FR)

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 

有了这个条款,我得到所有的价值值和TRANS值。我不知道如何实现德语LANG ='GER'的语言条件。

谢谢你的帮助和指导!

回答

0

我会建议left join而非right join(语义更容易遵循:“把一切都在第一表”,而不是“把一切都在无论发生什么事是最后表”

接着一个。简单coalesce()足够:

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; 

注意VALUES是一个SQL关键字,所以它是一个表一个不好的名字你可能会逃脱名

相关问题