加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2021-05-22 05:54:19 所属栏目:编程 来源:网络整理
导读:以是这是我的景象: 我正在为我的项目举办当地化,凡是我会在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执行相同的操纵,但我猜疑这险些总会导致针对沟通工具的多次扫描.

(编辑:湖南网)

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

热点阅读