sql-server – 选择所有记录,如果存在连接,则连接表A,否则连接表
发布时间:2021-05-22 06:30:21 所属栏目:MsSql教程 来源:网络整理
导读:所以这是我的情景: 我正在为我的项目进行本地化,通常我会在C#代码中执行此操作,但是我想在SQL中执行此操作,因为我试图稍微增加SQL. 环境:SQL Server 2014 Standard,C#(.NET 4.5.1) 注意:编程语言本身应该是无关紧要的,我只是为了完整性而包含它. 所以我完
此外,我为它荒谬漫长道歉,我只是不想有任何歧义.我经常在StackOverflow上看到缺乏实质的问题,不想在这里犯这个错误. 解决方法这是我提出的第一种方法:DECLARE @ChosenLanguage INT = 48; SELECT sc.Id,Result = MAX(COALESCE( CASE WHEN lst.LanguageId = @ChosenLanguage THEN st.Text END,CASE WHEN lst.LanguageId = sk.DefaultLanguageId THEN st.Text END) ) FROM dbo.SupportCategories AS sc INNER JOIN dbo.StringKeys AS sk ON sc.StringKeyId = sk.Id LEFT OUTER JOIN dbo.LanguageStringTranslations AS lst ON sk.Id = lst.StringKeyId AND lst.LanguageId IN (sk.DefaultLanguageId,@ChosenLanguage) LEFT OUTER JOIN dbo.StringTranslations AS st ON st.Id = lst.StringTranslationId --WHERE sc.Id = 1 GROUP BY sc.Id ORDER BY sc.Id; 基本上,获取与所选语言匹配的潜在字符串并获取所有默认字符串,然后进行聚合,这样您只需为每个Id选择一个 – 优先选择所选语言,然后将默认值作为后备. 您可以使用UNION / EXCEPT执行类似的操作,但我怀疑这几乎总会导致针对相同对象的多次扫描. (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |