【问题标题】:Oracle inner and outer join valid combinationsOracle 内连接和外连接有效组合
【发布时间】:2015-12-16 04:08:16
【问题描述】:

在同一个查询中结合 Oracle 内连接和外连接是否有效:

select b.col1, c.col2, sum(d.col1), sum(e.col1) from 
a  
inner join b on a.xxx = b.xxx 
inner join c on a.yyy = c.yyy 
left join d on b.aaa = d.aaa and c.bbb = d.bbb
left join e on b.aaa = e.bbb and c.aaa = e.bbb
group by b.col1, c.col2

【问题讨论】:

  • 是的,它是有效的。我觉得你的 group by 有问题?是吗?
  • 是的,总和并没有像我预期的那样加起来。
  • 啊,没关系。 Sum 正在运行 - 我遇到了与查询无关的其他问题。
  • 为什么你认为它无效?
  • @MarcusLeon,以下任何答案对您有帮助吗?

标签: sql oracle join


【解决方案1】:

是的,您可以按照您认为适合查询的方式组合内连接、左连接和右连接。只要确保您了解内连接、左连接和外连接的含义。几个博客很好地描述了连接:http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

【讨论】:

    【解决方案2】:

    在 sum(d.col1) 和 sum(e.col1) 值中忽略外连接空值。

    Why SUM(null) is not 0 in Oracle?

    如果您的空外连接结果需要备用默认值,请考虑使用 NVL 和类似方法。

    Sum columns with null values in oracle

    【讨论】:

      【解决方案3】:

      请试试这个,所有非聚合列都应该在 group by 子句中。

       select b.col1, c.col2, sum(d.col1), sum(e.col1) from 
          a  
          inner join b on a.xxx = b.xxx 
          inner join c on a.yyy = c.yyy 
          left join d on b.aaa = d.aaa and c.bbb = d.bbb
          left join e on b.aaa = e.bbb and c.aaa = e.bbb
          group by b.col1, c.col2
      

      【讨论】:

      • 谢谢,我更新了我的示例。我实际上是这样做的——但在我的例子中犯了一个错误。
      猜你喜欢
      • 2018-07-31
      • 2016-06-07
      • 2014-09-23
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      • 2016-10-02
      相关资源
      最近更新 更多