加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 选择所有记录,如果存在连接,则连接表A,否则连接表

发布时间:2021-05-22 10:30:06 所属栏目: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执行类似的操作,但我怀疑这几乎总会导致针对相同对象的多次扫描.

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读