Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-当翻译不存在时回退到默认语言_Sql_Sql Server_Internationalization - Fatal编程技术网

SQL-当翻译不存在时回退到默认语言

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

在具有以下结构的表格(tbl_i18n)中记录不同语言的文本:

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,简短而准确。坦克斯。