2
选择所有记录,如果存在联接,则与表A联接,如果不存在,则与表B联接
所以这是我的情况: 我正在为我的一个项目进行本地化,通常我会在C#代码中进行此操作,但是我想在SQL中进行更多操作,因为我想稍微弄点点SQL。 环境:SQL Server 2014 Standard,C#(.NET 4.5.1) 注意:编程语言本身应该无关紧要,为了完整起见,我仅将其包括在内。 所以我完成了我想要的,但是没有达到我想要的程度。自从我完成了JOIN除基本SQL 之外的任何SQL以来,已经有一段时间了(至少一年),这相当复杂JOIN。 这是数据库相关表的示意图。(还有更多,但是这部分不是必需的。) 映像中描述的所有关系都已在数据库中完成- PK和FK约束都已设置和运行。所描述的列均不null可用。所有表都具有架构dbo。 现在,我有一个查询这几乎做什么,我想:即给定任何的标识SupportCategories和任何的标识Languages,这将返回: 如果有合适的,正确的翻译是语言该字符串(即StringKeyId- > StringKeys.Id存在,并在LanguageStringTranslations StringKeyId,LanguageId以及StringTranslationId是否同时存在,那么它的负载StringTranslations.Text为StringTranslationId。 如果LanguageStringTranslations StringKeyId,LanguageId和StringTranslationId组合没有不存在,那么它加载的StringKeys.Name值。该Languages.Id是给定的integer。 我的查询很混乱,如下所示: SELECT CASE WHEN T.x IS NOT NULL THEN T.x ELSE (SELECT CASE WHEN dbo.StringTranslations.Text IS NULL THEN dbo.StringKeys.Name ELSE dbo.StringTranslations.Text END AS Result FROM dbo.SupportCategories INNER JOIN dbo.StringKeys ON …