【问题标题】:How do I get a substitute row after left outer join左外连接后如何获得替代行
【发布时间】:2016-07-11 22:49:40
【问题描述】:

我必须从 2 个表中构建一个视图:languagesarticles

表格语言

langId:1   langCode:en   priority: 1
langId:2   langCode:da   priority: 2 
langId:3   langCode:es   priority: 3

文章

langId: 1, articleId: 1 title: "First art-en"   originId: "ASDF"
langId: 2, articleId: 2 title: "First art-da"   originId: "ASDF"
langId: 1, articleId: 3 title: "Second art-es"  originId: "AAAA"

不同语言的同一篇文章会有一个独特的OriginId。 当文章不存在特定语言时,我需要选择一个替代行,这应该基于语言优先级。

实现这一目标的最佳方法是什么? 我想避免使用 CTE/Temp 表和循环语句。

【问题讨论】:

  • 避免 CTE 是否意味着避免派生表?
  • 我对子查询很好,但不想创建任何临时表/公共表实体..等。这是一个视图。

标签: sql sql-server sql-server-2008 join left-join


【解决方案1】:

这是一个优先级查询。您可以使用row_number()

select al.*
from (select a.*,
             row_number() over (partition by l.priority) as seqnum                                
      from article a join
           language l
           on a.langid = l.langid
     ) al
where seqnum = 1;

【讨论】:

  • 谢谢戈登。但是……这只能解决一半的问题。您将获得优先级最低的行。但是,它应该在左/右外连接之后“替换”行。我该怎么做?
猜你喜欢
  • 2012-04-19
  • 1970-01-01
  • 2016-11-23
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2011-10-01
  • 1970-01-01
相关资源
最近更新 更多