Sql Server,从表2中选择列,从表1中选择列没有关系

时间:2014-06-30 05:27:42

标签: sql-server join relationship coalesce not-exists

请任何人帮我获得正确的查询吗?

我有两张表格,上面有标题/称呼信息。第一个“标题”包含标题/称呼的系统/英语定义的确定列表,另一个“标题转换”包含已添加的翻译文本。对于任何语言代码,翻译数据可能完全或部分缺失,因此必须在缺少时提供默认系统数据。

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功能是实现此目的的最佳方法吗?或者有更好的方法吗?

0 个答案:

没有答案