SQL替换其他表中的值(如果存在)

时间:2017-07-31 13:03:47

标签: 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,则保留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

使用此子句,我将获得所有VALUE值和TRANS值。我不知道如何为德语LANG ='GER'实现语言条件。

感谢您的所有帮助和指示!

1 个答案:

答案 0 :(得分: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关键字,因此它是表的错误名称。你可能不得不逃避这个名字。