我想结合两个表的数据。表格是:
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'实现语言条件。
感谢您的所有帮助和指示!
答案 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关键字,因此它是表的错误名称。你可能不得不逃避这个名字。