我有一个包含数字数据的表,该表需要与各种不同语言的描述数据相匹配。这是通过具有一个"localizations"表来实现的,该表具有一个id列,该列是引用具有数据的表的FK。
我需要的是能够将数据表连接到ID列上的本地化表;本地化";为每个id列匹配的行–根据所提供的语言和本地化选择最匹配的行。
例如:给定语言"en"和本地化"IN"(数据库中不存在(,我想取回与数据表连接的英语/GB数据。
本地化表如下所示:
id | 语言 | 本地化default_for_lang其他数据 | ||
---|---|---|---|---|
1 | 'en' | 'US'true | ||
1 | 'en' | 'GB'false | ||
1 | 'es' | 'MX'false | ||
1 | 'es' | 'SP' | 真 | |
2 | 'en' | 'US'真 | ||
2 | 'en' | 'GB' | false | |
2 | 'es' | 'MX'false | ||
2 | 'es' | 'SP' | 真 | |
这与其说是一个答案,不如说是一种适用于我的用例的潜在解决方法。我会发帖,以防它能帮助任何有类似问题的人。
SELECT
dt.*, l.name, l.notes, l.language, l.localization
FROM data_table dt
LEFT JOIN (
SELECT id,
STRING_AGG(language, '%%%') AS language,
STRING_AGG(ISNULL([localization], '??'), '%%%') AS localization,
STRING_AGG(name, '%%%') AS name,
STRING_AGG(ISNULL([notes], ' '), '%%%') AS notes
FROM x_localizations_table
WHERE
(language = @language OR language = 'en') AND
(localization = @localization OR is_default_lang_localization = 1)
GROUP BY id
) l
ON t.id = l.id;
这将导致返回(对于"es SP"(:
id | [data] | language | ocalization ta]
---|---|---|
1 | 'en%%es' | |
'[英文名称]%%[西班牙文名称]' | '[英语注释]%%[西班牙语注释]' |