SQL-当翻译不存在时回退到默认语言
在具有以下结构的表格(tbl_i18n)中记录不同语言的文本:SQL-当翻译不存在时回退到默认语言,sql,sql-server,internationalization,Sql,Sql Server,Internationalization,在具有以下结构的表格(tbl_i18n)中记录不同语言的文本: text_FK | language_FK | value ----------------------------- 1 | 1 | hello 1 | 2 | hallo 2 | 1 | world 3 | 1 | test 提供特定语言(id=2)的文本,并使用以下简单连接: SELECT [val
text_FK | language_FK | value
-----------------------------
1 | 1 | hello
1 | 2 | hallo
2 | 1 | world
3 | 1 | test
提供特定语言(id=2)的文本,并使用以下简单连接:
SELECT [value] FROM tbl_i18n i
JOIN tbl_products p ON p.text_id = i.text_FK
JOIN tbl_languages l ON l.id = i.language_FK AND i.language FK = 2;
结果是:
value
-------
hallo
前面提到的select语句是如何更改的,这样我们就可以得到一种默认语言,并且当文本字段的翻译不存在时,将显示它们的回退文本,结果将变成:
value
-------
hallo
world
test
我想用简单的英语,你希望每个
text\u-FK
都有最高的可用language\u-FK
WITH X AS (
SELECT *
,ROW_NUMBER() OVER (PARTITION BY text_FK ORDER BY language_FK DESC)rn
FROM TableName
)
SELECT *
FROM X
WHERE X.rn = 1
我想用简单的英语,你希望每个
text\u-FK
都有最高的可用language\u-FK
WITH X AS (
SELECT *
,ROW_NUMBER() OVER (PARTITION BY text_FK ORDER BY language_FK DESC)rn
FROM TableName
)
SELECT *
FROM X
WHERE X.rn = 1
LEFT JOIN
language表两次。第一次用于通缉语言,第二次用于回退值。使用COALESCE
选择需要的语言(如果可用),否则选择回退语言
SELECT coalesce(l1.[value], l2.[value])
FROM tbl_i18n i
JOIN tbl_products p ON p.text_id = i.text_FK
LEFT JOIN tbl_languages l1 ON l.id = i.language_FK AND i.language_FK = 2
LEFT JOIN tbl_languages l2 ON l.id = i.language_FK AND i.language_FK = 1;
LEFT JOIN
language表两次。第一次用于通缉语言,第二次用于回退值。使用COALESCE
选择需要的语言(如果可用),否则选择回退语言
SELECT coalesce(l1.[value], l2.[value])
FROM tbl_i18n i
JOIN tbl_products p ON p.text_id = i.text_FK
LEFT JOIN tbl_languages l1 ON l.id = i.language_FK AND i.language_FK = 2
LEFT JOIN tbl_languages l2 ON l.id = i.language_FK AND i.language_FK = 1;
你能修改这个问题以便更好地理解吗?同时检查这个问题,看看它是否有帮助@lostmylogin,这里我们有3个文本字段和4个记录。英语3个,德语1个。hello field有德语翻译,但其他人没有。我想获得所有德语字段,但如果没有德语翻译,则应返回英语字段。链接的Tanx;看起来很有希望。你能修改这个问题以便更好地理解吗?同时检查这个问题,看看它是否有帮助@lostmylogin,这里我们有3个文本字段和4个记录。英语3个,德语1个。hello field有德语翻译,但其他人没有。我想获得所有德语字段,但如果没有德语翻译,则应返回英语字段。链接的Tanx;看起来很有希望。为了简单起见,我刚刚使用了
int
ids;实际上,我们使用uniqueidentifier
作为ID;因此,我不确定我们是否可以使用orderby
;实际上,我们使用uniqueidentifier
作为ID;因此,我不确定我们是否可以使用按订购。简短而准确。Tanx,简短而准确。坦克斯。