Oracle 内连接和外连接有效组合
Posted
技术标签:
【中文标题】Oracle 内连接和外连接有效组合【英文标题】:Oracle inner and outer join valid combinations 【发布时间】: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,以下任何答案对您有帮助吗? 【参考方案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
【讨论】:
谢谢,我更新了我的示例。我实际上是这样做的——但在我的例子中犯了一个错误。以上是关于Oracle 内连接和外连接有效组合的主要内容,如果未能解决你的问题,请参考以下文章