Sql server Sql Server,选择表2中的列和表1中没有关系的列
有人能帮我找到正确的查询吗 我有两张桌子,上面有标题/称呼信息。第一个“Title”包含标题/称呼的系统/英语定义的最终列表,另一个“titletransation”包含已添加的翻译文本。任何语言代码的翻译数据可能全部或部分缺失,因此在缺失时必须提供默认系统数据Sql server Sql Server,选择表2中的列和表1中没有关系的列,sql-server,join,relationship,coalesce,not-exists,Sql Server,Join,Relationship,Coalesce,Not Exists,有人能帮我找到正确的查询吗 我有两张桌子,上面有标题/称呼信息。第一个“Title”包含标题/称呼的系统/英语定义的最终列表,另一个“titletransation”包含已添加的翻译文本。任何语言代码的翻译数据可能全部或部分缺失,因此在缺失时必须提供默认系统数据 Title ----- TitleId INT PK Name VARCHAR(12) /* English (en) / system version */ TitleTranslation -------------
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 + '%';
具有外部联接的合并函数是实现这一点的最佳方法吗?还是有更好的方法呢?我觉得没问题。简言之,谨防过早优化。简而言之,除非你有充分的理由,或者查询本身没有达到你想要的效果,否则不要尝试优化它。如果您确实想优化它,请通过ssms运行它并显示它的查询计划。sql本身看起来不错。谢谢你的建议。我对标准积垢以外的任何问题都不擅长!