请任何人帮我获得正确的查询吗?
我有两张表格,上面有标题/称呼信息。第一个“标题”包含标题/称呼的系统/英语定义的确定列表,另一个“标题转换”包含已添加的翻译文本。对于任何语言代码,翻译数据可能完全或部分缺失,因此必须在缺少时提供默认系统数据。
Title
-----
TitleId INT PK
Name VARCHAR(12) /* English (en) / system version */
TitleTranslation
----------------
TitleTranslationId INT PK
TitleId INT FK
LanguageCode CHAR(2) /* 2 character ISO code (fr, es, ...) */
Name VARCHAR(12)
我要求对指定语言代码的给定参数做什么,例如'fr',返回系统中存在的任何翻译标题'Name',或者他们没有的默认英文系统标题'Name' 。另外,我需要能够在名称上提供过滤器。
到目前为止,我有这个查询,
DECLARE @LanguageCode CHAR(2);
SELECT @LanguageCode = 'fr';
DECLARE @NameFilter VARCHAR(12);
SELECT @NameFilter = 'M';
SELECT COALESCE([TitleTranslation].[name], [Title].[Name]) [Name]
FROM [ref].[Title]
LEFT OUTER JOIN [ref].[TitleTranslation]
ON [ref].[TitleTranslation].[TitleId] = [ref].[Title].[TitleId]
WHERE ([ref].[TitleTranslation].[LanguageCode] = @LanguageCode
OR [ref].[TitleTranslation].[LanguageCode] IS NULL)
AND COALESCE([TitleTranslation].[name], [Title].[Name]) Like '%' + @NameFilter + '%';
使用OUTER JOIN的COALESCE功能是实现此目的的最佳方法吗?或者有更好的方法吗?