оракул sql присоединиться не правильно - PullRequest
1 голос
/ 28 октября 2019

Я хочу сложить две таблицы. Обе таблицы содержат количество строк, сгруппированных по категориям:

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

Не знаюЯ не понимаю, почему я не получаю все три категории. Я коротко присоединяюсь вместо правого соединения.

Ответы [ 3 ]

4 голосов
/ 28 октября 2019

Проблема с правым объединением состоит в том, что таблица 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;
1 голос
/ 28 октября 2019

Вы можете использовать union all и агрегацию:

select category ,sum(number) value 
from (
    select category, number from tablea
    union all select category, number from tableb
)
group by category

Другой вариант - сделать full outer join: это позволит значениям поступать с обеих сторон объединения:

select 
    coalesce(ta.category, tb.category) number,
    sum(coalesce(ta.number, 0) + coalesce(tb.number, 0)) value
from tablea ta 
full outer join tableb tb on ta.category = tb.category 
group by coalesce(ta.category , tb.category )
0 голосов
/ 28 октября 2019

Я должен был использовать nvl (). Это работает:

select a.category, nvl(a.number, 0) + nvl(b.number, 0) as number
from  a
right join  b
    on a.category = b.category
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...