首页 > 解决方案 > oracle sql连接不正确

问题描述

我想总结两张表。两个表都包含按类别分组的行数:

number    category
5          A
4819       B
1          C

number    category
12043      B

我尝试了以下方法:

select a.category, a.number + b.number as number
from  a
right join  b
    on a.category = b.category

我得到:

number     category
4          16862

我不明白为什么我没有得到所有三个类别。我尝试左连接而不是右连接。

标签: sqloraclejoin

解决方案


右连接的问题是a表应该出现在连接的右侧。或者,使用左连接,我们可以这样写:

SELECT
    a.category,
    a.number + COALESCE(b.number, 0) AS number
FROM tablea a
LEFT JOIN tableb b
    ON a.category = b.category;

但是这个答案假设该a表将包含您希望出现在结果集中的每个类别。对于更通用的解决方案,我们可能必须使用完全外连接:

SELECT
    COALESCE(a.category, b.category) AS category,
    COALESCE(a.number, 0) + COALESCE(b.number, 0) AS number
FROM tablea a
FULL OUTER JOIN tableb b
    ON a.category = b.category;

推荐阅读